AIと機械学習

# 1. はじめに
今までは、自分が欲しいと思う情報を見つけようとした時、web上でキーワードを検索してきました。今では、ChatGPTを使って情報を見つけるようになって欲しい情報を見つけるまでの時間が格段に減ってきました。その発展に大きく貢献した技術の一つとして、CPUを使った処理から、CPUとGPUを組み合わせ、複雑な大規模な処理を並列に処理して実行していくシステム構成が可能になったことで格段に処理速度が向上してきたことが要因のひとつにあります。今回、AI(Artificial Intelligence)の基本的な概念とこのシステム構成の変化によってもたらされたことでどんな変化があったか考えてみたいと思います。

# 2. AI(Artificial Intelligence)
AIは、人間の知能を模倣する技術の総称で、学習、推論、自己修正などの機能を持ち、多岐にわたるタスクを自律的に実行する能力を持ちます。その技術は、画像認識による機械学習、deep learning、強化学習などに使用されています。
![スクリーンショット 2024-11-22 12.07.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/a0b0120b-44ab-8a5a-0758-df3633de5c68.png)
AIが行っている動作を簡単な図にしてみました。Inputしたデータは、ある学習モデルによって変換を繰り返し、欲しい情報を導き出してoutputします。AIは、この学習モデルという部分に特徴があり、自律的に判断を行うことができます。さらにその出力した結果が失敗と判断された場合は、調整を行い、改善を繰り返し学習してきます。

## 2.1 IAの構成
IA(Intelligent Assistant)とは、AIの中で学習する工程がなく、ユーザーの指示にしたがって特定のタスクを支援する技術になります。
IAの構成です。IAは、環境からエージェントと呼ばれるソフトウエアを介して結果を返します。エージェント側は、環境側からセンサを用いて今の環境を認識します。センサからは、処理するためのルールを介して実行させるアクチュエーターに渡します。アクチュエーターは、指定されたフォーマットに沿って環境側へ結果を返します。
![スクリーンショット 2024-11-22 14.22.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/22c12ba9-1b8e-6168-2e91-796509b5d523.png)
IAは、CPUを使用した処理からGPUを活用する処理をするようになることで処理速度が格段に向上していきました。次に、この変化がもたらしたことについて考察してみます。

### 2.1.1 CPUとGPUの処理の違い
CPUとGPUのハードとしての大きな違いは、CPUは各処理を順番に処理するシリアル処理をすることに対し、GPUは、似たような処理がパラレルに処理できるように変換し同時に処理することで速度が格段に短縮することができるようになりました。
例えば、1ピクセルに画像を表示することを考えてみます。モノクロだった時代は単純に、onするoffするといった信号しかなかったのですが、カラーの情報を渡そうとした場合、RGBで表現できる信号を伝える必要が出てきます。対象とピクセルに渡すことができる信号線が１つだけだった場合、以降の信号はシリアル情報として、その信号の後に並べて処理することになり、それだけ処理に時間がかかることになります。GPUでは、並列に処理を実行できるようにしているため、並列に並べているだけ処理が一気に行えるようになるため、処理速度が向上します。GPUを使うことで、ゲームのように高画質で滑らかな動きがディスプレイで表現できるようになっています。
![スクリーンショット 2024-11-22 14.47.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/f25255cc-5406-89f8-f667-1cf092d59d80.png)

### 2.1.2 GPUでの処理がもたらしたもの
GPUを使った処理がもたらしたことの変化は、高画質なディスプレイをなめらかに動かすことできるようになったことだけはなく、検索速度を向上させることにも貢献しています。
キーワード検索をすることを考えてみます。ANDやORを使用して検索すると、欲しい情報にたどり着くまでに思いつくキーワードを並べたり、出力された検索結果から探し出すため、欲しい情報にたどり着くまでに時間がかかっていました。GPUを使用しパラレルに処理できる機能が発達したことによって、自然言語の処理を得意とする大規模言語モデル(LLM:Large language model)が考案されました。これは、keywordをLLMが処理するための数字に変換し、ベクトルから関連性が高いものを検索させることができるようになりました。
![スクリーンショット 2024-11-24 15.48.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/804c6994-7231-98bf-fcb8-1085af6ddfc3.png)

|分類  |キーワード検索  |ベクトル検索  |
|---|---|---|
|検索方法  |キーワード一致  |埋め込み処理をしたベクトル/キーワード一致  |
|曖昧さ|-|従来よりも同義語、曖昧な言語、広範囲またはあいまいなクエリの処理に優れている|
 
　また、テキストのような文字データだけでなく、画像や音声などを入力し、扱うことできる大規模マルチモーダルモデル(LMM:Large Multimodal Model)もあり、テキストに加え、画像、動画、音声などを扱うことができるようになっています。

## 2.2 AIの分類
AIについて下記のように分類しました。
|分類  |概要  |例  |
|---|---|---|
|弱いAI(Narrow AI)|特定のタスクに特化したAIです。ある特定の問題解決に焦点を当て、人間のような広範な知識や汎用的な知能は持ちません。|音声認識システム（SiriやAlexaなど）、対話型IAI(Chat GPT)など|
|機械学習(Machine Learning)|データを用いて自ら学習し、パターンを見つけて予測を行う技術です。プログラムが経験から学ぶことを可能にします。|回帰分析、クラスタリング、ニューラルネットワークなど。|
|ディープラーニング(Deep Learning)|機械学習の一部で、特に多層のニューラルネットワークを使用して複雑なパターンを学習する技術です。|画像認識、自然言語処理、音声認識など。|
|強化学習(Reinforcement Learning)|エージェントが環境との相互作用を通じて報酬を得ることで、最適な行動を学習する方法です。|ゲームAI、自動運転車、ロボット制御など。|

## 2.3 AIと機械学習とディープラーニング
AIと機械学習とディープラーニングの関係性は下記のように表現することができます。
![スクリーンショット 2024-11-24 16.35.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/23de9787-32d2-6da2-617a-ac865e161fce.png)

機械学習は、特定の事象についてデータを解析し、その結果か学習し、判断や予測を行うための技術で、教師あり学習、教師なし学習、強化学習として、下記のように分類することもできます。
|分類  |概要  |
|---|---|
|教師あり学習|ラベル付きデータを使用して学習し、予測を行う|
|教師なし学習|ラベルなしデータを使用してパターンを見つけ出す|
|強化学習|試行錯誤を通じて最適な行動を学習する|

ディープラーニングは、機械学習の一種で、特に多層のニューラルネットワークを使用します。それにより複雑なパターン認識や予測が可能となります。

## 2.4 機械学習
### 2.4.1 機械学習のプロセス
![スクリーンショット 2024-12-24 21.35.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/6672af6e-030c-bca1-328d-9f3430dcb63f.png)
機械学習には、トレーニングデータを計算できるようにTensor(行列化)し、ニューラルネットワークを介して処理を行い、結果を出力しましす。ニューラルネットワークとは、脳の神経細胞の構造を参考に作られたアルゴリズムで、入力層、隠れ層、出力層から構成されています。各層はニューロンを介して入力信号を処理し、次の層に信号を伝達します。伝達した信号は、最終的に決まった形式で分析結果を出力します。

#### 2.4.1.1 2層の順伝搬
![スクリーンショット 2024-12-24 21.35.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/1332ab00-4d83-1e2f-1623-3fdd681e22ec.png)
ニューラルネットワークの仕組みを知っていくために、入力と出力の２層の順伝搬を考えていきます。計算式で表すと、
```math
\displaylines{
y_{j}=\sum^{m}_{i=i} f(x_{i}) \ w_{ji}x_{i} + b_{j}
}
```
となります。yは出力wは重み、xは入力、bはバイアスを表しています。重みとは、ネットワーク内の各ノード（ニューロン）同士が持つ「つながりの強さ」を表す値です。この重みを少しづつ調整していくことで正確に判断できるようにしています。bのバイアスとは、モデルの単純化により生じる、真の値からのズレを指します。wとbを適切な値に調整していくことで望ましい答えを出すようにしています。２層の順伝搬では、線形の出力となるため判別するための処理が必要となってきます。非線型に変換する処理として、次に示すように活性化関数を用います。

#### 2.4.1.2 3層の順伝搬
![スクリーンショット 2024-12-24 21.35.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176158/105fdfdd-9509-443a-68ad-0b12e86c27e9.png)
入力と出力の2層の順伝搬に活性化関数を加えた3層の順伝搬を考えていきます。計算式で表すと、
```math
\displaylines{
a_{j}=\sum^{m}_{i=i} f(x_{i}) \ w_{ji}x_{i} + b_{j}
}
```
```math
\displaylines{
z_{j}=f(a_{j})
}
```
となります。ここでポイントとなるのは、2層の重みバイアスを介した線形の出力結果を使って活性化関数へ代入し、非線型処理をすることです。
非線型処理をするということは、あるレベルを判定して0 or 1のデジタルな値に変換されます。デジタル変換ができるようになるということは、集積回路上で容易に計算したり加工することが可能になります。

以上、簡単ですが、AIの基本的なことをまとめてみました。何か調べたことがあれば、随時更新していきます。

### 2.5 参考文献
[Evolution of search: traditional vs vector search](https://objectbox.io/evolution-of-search-traditional-vs-vector-search/)
[ニューラルネットワークとは? 仕組み・種類・活用例を解説](https://corp.rakuten.co.jp/event/rakutentech/ai/neural-network.html)
[Transformerとは？AI機械学習の仕組みを解説](https://udemy.benesse.co.jp/data-science/transformer.html)
[ニューラルネットワークの信号の伝達と順伝播（行列計算）について](https://www.math-joy-life.com/nn-forward-propagation)
[ニューラルネットワーク１](https://www.nomuyu.com/neural_network1/)
[【活性化関数】02 活性化関数の種類5つ](https://zenn.dev/nekoallergy/articles/ml-basic-act-02)
[畳み込みニューラルネットワーク(CNN)をわかりやすく基本から実装まで解説](https://zero2one.jp/learningblog/cnn-for-beginners/)
[メディカルAI専門コース オンライン講義資料](https://japan-medical-ai.github.io/medical-ai-course-materials/index.html)