生成AI完全に理解した気になりたい

# 雰囲気

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/b3967987-612a-ae6f-c6e0-8f3745119ba7.png)

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/26af4ffd-b8cb-255f-a564-027a27338ceb.png)

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/59106215-41da-0540-2b08-f9ece6a025c0.png)

# 技術の歴史

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/a7707296-395c-1cfe-c130-59d606031738.png)

* 人間と同じようなアウトプットを返すためには、**人間の脳の真似** をすればよい
* ノードを繋いで計算の重みづけを調整する、を多数繋げれば理論上は人間の脳と同じになるはず

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/5589f431-c7bf-7e53-d251-82a8aa199665.png)

* 単層パーセプトロンでは線形分離可能な問題のみ解くことが出来る
    * AND演算、OR演算など...
    * あまりにも簡単な問題しか解けなかったのでそれほど注目されなかった
* 多層にするとより複雑な（線形分離不可能な問題も）解くことが出来る
    * 画像の文字認識（予め登録されたカテゴリーへの分類）とか
* が、4層以上にすると学習が難しくなる問題があり、20年以上3層までだった

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/b4eaf7b4-240e-93f9-1a8b-0d731ca6d66f.png)

* 手法改善の積み重ねや計算速度の向上などにより多層のNNが2006年頃に実用レベルへ
* 256ノード、40層のDNNが囲碁で人間に勝てた
* 学習するデータを増やせば増やすほど性能は上がるが、大量の教師データを用意するのが難しいし、学習時間も非常に多くなってしまうので工夫が必要

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/075b3a66-18e4-5d7b-f85c-e82a0d7264c5.png)

* DNNを再帰的に繋ぐことで、入力の時系列を扱えるようにしたモデル
* これによって、単語の前後関係を考慮した文章の処理ができるようになった
* 再帰処理が長くなると古い情報はどんどん忘れられてしまう（パラメータの影響が小さくなる）ため、長文の処理は苦手
* 時系列の **逐次処理** なので並列化による高速化ができない

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/428d8f81-23d7-a716-485f-7c1b40d65db3.png)


* 複数の入力（自然言語の１文章など）に対して、重要度の重み付けを行う
    * 事前に学習した単語間の関連度スコアを元に、関連性の高い単語の組み合わせを計算する
    * ざっくり説明すると、ただの **巨大な辞書データ**
    * 重要な単語を優先して解釈することで人間が長文を読むときと同じように高速に処理ができるようになった
* RNNにAttention機能を組み合わせることで、長文を扱えるようになった


![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746701/677f986e-f308-f859-8f20-96886d29447e.png)

* RNN＋Attention で長文も扱えるようになったかに思われたが... その時業界に激震走る
    * Attention Is All You Need（2017）
* RNNの仕組みを使わなくても、Attention 部分だけで十分な自然言語処理ができることがわかった
    * NN部分の複雑さを追い求める今までの手法とは一線を画す手法

# Transformerモデル解説

* 位置情報の埋め込み
    * RNNで行われていた「単語の前後関係を記憶する」部分をカバーするための仕組み
    * 各単語の位置関係（インデックス）を行列に変換して埋め込み
* Attention はざっくり言えばただの辞書データ
    * 単語間の関連度をマッピングしたもの
        * 翻訳のための学習なら翻訳元と翻訳後の セットを大量に学習してマップを作る
        * 自然言語生成なら、同一文章内の単語同士の関連性を大量のデータを元に作る
* NNは2層の全結合
    * Attentionを挟むことで、CNNやRNNと比べて少ない層のNNでも同等以上の性能が出た

### 高速化ポイント

* 前の処理結果に依存しなくなったので、**並列処理** が可能に
    * GPUでの計算に向いている
* **NNの層が少なく**なり、学習自体も軽量化
    * 必要計算量が1/100~1/1000程度に

### 高速化しただけでなんでこんなAIブームに？

* AI性能のスケーリング則（2020年）
* AIの性能は3つのパラメータの **べき乗** に比例する
    * 計算量（学習時間）
    * データ量
    * パラメータ量（モデルサイズ）

つまり... ある閾値を超えるとアルゴリズムを工夫するよりも計算量やデータ量を増やす方が効率的に性能を上げられるようになる

**...札束で殴る時代へ！**

# 生成AIざっくり説明

* 自然言語におけるAIの処理は、入力に対して最も関連性の高い（確率の高い）次の単語を予測する、というもの
* 予測した単語を含んだ文章を入力に戻してまたその次の単語を予測して...とループさせることで文章を生成できる
* テキストから画像の変換も同じロジックで、入力テキストから最も確率の高い画像を予想して出力させる
    * テキスト、画像に関わらず、入力データ列（入力ベクトル）と推測結果のデータ列（出力ベクトル）の関連性さえ計算できればよい
    * 入力の変換（エンコーダ）、出力の変換（デコーダ）さえできれば、途中の計算はひたすら行列演算するだけなので何にでも適用できる
        * 学習素材は必要なので、大量のデータセットがある自然言語と画像生成の分野が発展している
        * 動画や音楽、3Dモデルなんかも理論上は同様に扱えるはず

# まとめ

* 2016年頃までのAIは学習に時間がかかる仕組みだった
    * 「それなりに大規模」で「綺麗な」データセットを持っていることが有利だった
    * アルゴリズムや前処理などの工夫で性能を向上させてきた
* 2017年に登場したTransformerモデルで、処理能力が大幅に向上した
* GPUの許す限り学習すればするほど指数関数的に性能が伸びることが判明
    * データの質から量への転換
        * 量が質を変える「相転移」
    * 札束で殴る時代へ