AIとは機械学習とは深層学習とは生成AIとはβ版

# 本記事のめあて
- 自然言語を中心とした生成AIの、AIの中での位置付けの整理

## 背景
- ネット上の記事により、AI、機械学習、深層学習、生成AIの位置付けに混乱が見られるのでそれを整理したかった

## 概要
- AIとはを説明しその中の機械学習の位置づけ
    - 予測AIと生成AIの違い
- 機械学習とはを説明しその中の深層学習の位置づけ
- 深層学習を説明しその中の生成AIの位置づけ
    - LLMでも生成AIでないものもある
- 生成AIとはで、自然言語処理を中心に説明する
    - 生成AI自体を詳述するのではなく、AIの中での位置付けのみ
- 生成AIに関係ないところは軽く触れるか記載なし（機会があればまた別記事で）

あちこちから刺されそうな記事ですが刺さずにコメントで指摘いただくと嬉しいです。

## 本記事の見取り図

```plantuml
@startmindmap
+[#white] AIとは
++[#skyblue] AIの定義
++[#skyblue] AIの歴史
++[#skyblue] AIの分野
+++[#skyblue] AIマップ
+++[#skyblue] 機械学習との違い
++++[#white] 機械学習
+++[#skyblue] 予測AI・生成AI
++++[#white] 生成AI

+[#white] 機械学習とは
++[#skyblue] 機械学習の定義
++[#skyblue] 機械学習の歴史
++[#skyblue] 機械学習の分野
+++[#skyblue] 統計学との違い
+++[#skyblue] 〇〇学習
++++[#skyblue] 教師あり学習\n・教師なし学習
+++++[#skyblue] ・分類\n・回帰\n・クラスタリング\n・次元削減
++++++[#skyblue] 代表的な\nアルゴリズム
+++++++[#white] 深層学習


+[#white] 深層学習とは
++[#skyblue] 深層学習の定義
++[#skyblue] 深層学習の歴史
++[#skyblue] 深層学習の分野
+++[#skyblue] 様々なモデル
+++[#skyblue] 適用分野
++++[#skyblue] 自然言語処理
+++++[#skyblue] word2vec
+++++[#skyblue] Attention/Transformer
+++++[#skyblue] LLM
++++++[#skyblue] エンコーダー\nデコーダー\nエンコーダー・デコーダー
+++++++[#white] 生成AI
+++++[#skyblue] 実装環境
++++++[#skyblue] プラットフォーム
+++++++[#skyblue] HuggingFace
++++++[#skyblue] ライブラリ
+++++++[#skyblue] Transformers
+++++++[#skyblue] LangChain
++++[#skyblue] 画像・動画・音声など

+[#white] 生成AIとは
++[#skyblue] 生成AIの定義
++[#skyblue] 生成AIの歴史
++ 生成AIの分野
+++[#skyblue] 理論
++++[#skyblue] 深層学習
++++[#skyblue] 深層学習以外
+++++[#skyblue] セルオートマトン
+++++[#skyblue] マルコフモデル
+++++[#skyblue] 遺伝的アルゴリズム
+++++[#skyblue] フラクタル
+++[#skyblue] 適用分野
++++[#skyblue] 自然言語処理
+++++[#skyblue] LLM
+++++[#skyblue] プロンプトエンジニアリング\n・RAG\n・ファインチューニング
++++++[#skyblue] プロンプトエンジニアリング
++++++[#skyblue] RAG
++++++[#skyblue] ファインチューニング
+++++[#skyblue] サービス
++++[#skyblue] 画像・動画・音声など
+++++[#skyblue] GAN
+++++[#skyblue] Diffusion

@endmindmap
```

書籍でここらを学ぼうとする方はよければこの記事も見てください。

https://qiita.com/aokikenichi/items/0e064ecd3824fab9424d


---
# AIとは
## AIの定義
人工知能学会の（一般人向け？）定義

> **人工知能って何？**[^AI.whatis]
> 「人工知能」とは何だと思うでしょうか？まるで人間のようにふるまう機械を想像するのではないでしょうか？これは正しいとも，間違っているともいえます．なぜなら，人工知能の研究には二つの立場があるからです．一つは，人間の知能そのものをもつ機械を作ろうとする立場，もう一つは，人間が知能を使ってすることを機械にさせようとする立場です．そして，実際の研究のほとんどは後者の立場にたっています．ですので，人工知能の研究といっても，人間のような機械を作っているわけではありません．
> それでは，実際の研究ではどのようなことをしているのでしょうか？人工知能の研究には，人工知能研究で紹介しますようにいろいろな分野があります．ここでは，この中から「推論」と「学習」を取り上げます．
> 
> - 「推論」とは「知識をもとに，新しい結論を得ること」です．
> - 「学習」は何か機械が勉強をする感じがしますが，ここでは「情報から将来使えそうな知識を見つけること」です

:::note info
- 人工知能の定義はない！？
    - 以下のように、研究者により定義が異なり定まった定義はない状況。そもそも「知能」自体の定義が定まっておらず、また次に示す「AI効果」もあり、明確な定義は難しいものと思われる。
    - <img src="https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h28/image/n4201040.png" /><br/>（出典）松尾豊「人工知能は人間を超えるか」（KADOKAWA）p.45より作成<br/>「総務省. "平成28年版　情報通信白書のポイント"」[^Somusyo.2016]内での引用
:::

[^Somusyo.2016]: 総務省. "平成28年版　情報通信白書のポイント". 総務省. 2016. https://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h28/html/nc142110.html, (参照 2024-09-01).

:::note info
- AI効果
    > AI効果(AI Effect)とは、AI技術が日常生活に普及して当たり前の技術の1つとして使用されることで、「AI」という言葉が使われなくなる現象のことです。
    現在では、さまざまな分野で「AI技術を活用した〇〇」といった強調された言葉として認識されており、高い注目を集めています。
    しかし、1部ではiPhoneの「Siri」やGoogle翻訳などのようにAIとしてではなくただの機能として扱われているAIも多いです。[^AI.effect]
:::

[^AI.whatis]: 人工知能学会． “人工知能って何？”． 人工知能学会． https://www.ai-gakkai.or.jp/whatsai/m， (参照 2024-04-21)．

[^AI.effect]: Generative AI Media. "AI効果（AI Effect）とは何？AIの技術が一般化される？わかりやすく解説！". Generative AI Media. 2024-01-31. https://gen-ai-media.guga.or.jp/glossary/ai-effect/, (参照 2024-08-31).

## AIの歴史
人工知能学会「人工知能の歴史」[^AI.history] を元に（項目が多いので各世代10項目に絞りました）作成
```mermaid
gantt
    title 人工知能の夜明け（〜1956）
    dateFormat YYYY
    axisFormat %Y
        "ロボット"という言葉:1923, 1y
        ニューラルネットワークの基礎:1943, 1y
        将来コンピュータが人間の活動を補助と予見:1945, 1y
        ENIAC:1946, 1y
        現在の人工知能の概念:1947, 1y
        自己増殖オートマトン:1950, 3y
        チューリングテスト:1950, 1y
        チェスの解析:1950, 1y
        ロボット3原則:1950, 1y
        ダートマス会議にて"人工知能"という言葉:1956, 1y
```

```mermaid
gantt
    title 人工知能の夜明け（〜1956）
    dateFormat YYYY
    axisFormat %Y
        チェッカーで世界チャンピオンに挑戦: 1952, 11y
        機械翻訳に意味ネットワーク: 1958, 4y
        ニューラルネットの学習則を拡張: 1960, 1y
        最初のsymbol integration: 1961, 1y
        "パーセプトロン": 1962, 1y
        ELIZA: 1965, 1y
        科学・数学において成功した最初の知識ベース: 1967, 1y
        バックプロパゲーション: 1967, 1y
        パーセプトロンの限界を指摘: 1968, 1y
        人工知能最大の難問“フレーム問題”: 1969, 1y
```

```mermaid
gantt
    title 現実からの反撃（1970〜1979）
    dateFormat YYYY
    axisFormat %Y
        自然言語理解のAugmented Transition Networks: 1970, 1y
        積み木遊びを学習するARCHプログラム: 1970, 1y
        組合せ爆発問題を指摘したライトヒル勧告。英語で2大学を除きAI研究の補助金がうち切られる: 1973, 1y
        最初のエキスパートシステムMYCIN: 1974, 1y
        Meta-Dendral学会誌で認められた最初の科学的発見: 1975, 1y
        自然言語処理にて談話と前方照応参照: 1970, 10y
        視覚パーセプトロン"primal sketch": 1970, 10y
        GUI: 1970, 10y
        人工生命研究: 1978, 1y        
        最初のコンピュータ制御の自律した車Stanford Cart: 1979, 1y
```





```mermaid
gantt
    title 人工知能の産業化（1980〜1988）
    dateFormat YYYY
    axisFormat %Y
        音声理解の黒板モデル: 1980, 1y
        第1回AAAI: 1981, 1y
        コネクションマシン: 1981, 1y
        時系列事象のInterval Calculus: 1983, 1y
        CYCプロジェクト: 1984, 1y
        バックプロパゲーション: 1980, 10y
        自動描画プログラムAaronのデモ: 1985, 1y
        サブサンプション（包摂）アーキテクチャー: 1986, 1y
        Society of Mind: 1987, 1y
        信念ネットワークの定式化: 1988, 1y
```

```mermaid
gantt
    title 現在そして未来の彼方へ（1989〜）
    dateFormat YYYY
    axisFormat %Y
    コンピュータ制御による運転によって大陸を横断: 1989, 1y
    人口株式市場: 1989, 1y
    WWW: 1989, 1y
    遺伝的プログラミング: 1990, 1y
    強化学習によるバックギャモン: 1990, 3y
    データマイニング技術の誕生:1990, 10y
    チェスプログラムDeepBlueがG.Kasparovに勝利: 1997, 1y
    第1回のRoboCup: 1997, 1y
    ロボットペット: 1999, 1y
    WWWから収集した情報がAI技術を用いて処理: 1997, 3y
```

[^AI.history]: 人工知能学会. "人工知能の歴史". 人工知能学会. https://www.ai-gakkai.or.jp/whatsai/AIhistory.html, (参照 2024-08-31).

## AIの分野
### AIマップ
と、上記の定義や歴史を見てもAIの分野に何があるかは正直わかりにくい。
人工知能学会が"[AIマップ](https://www.ai-gakkai.or.jp/aimap/)"[^AI.map]を公開してくれている。

> 【AI課題マップ】
> AIシステムによる解決が期待される多数の課題を整理した課題カード群と、それらの関連性を示す課題関連マップで構成した。異分野研究者・実務者が自分の課題を念頭に、AI活用の観点から課題を整理・深堀りする時の支援を目指した。初学者には、課題群の全体像を把握し、目標を定める助けとしてほしい。なお、既にAIシステムの事例集や、産業別の応用解説が書籍等で広く提供されている。本マップはそれらを代替するものでは無く、既存情報では得難い、課題群への広い視野と、課題とAI技術との関連性の情報を提供する。
>
>【AI技術マップ】
> AI技術マップは、2019年に発刊した「AIマップβ」の改訂版である。人工知能学会 論文誌編集委員会の協力により、キーワードを精査し、人工知能学会の論文キーワードとの共通化を図った。
これにより最新の研究キーワードが追加された。また共通化により、今後発刊される学術論文をキーワードで辿ることが可能となる。異分野研究者・実務者に対し、研究や開発情報収集の道標として役立つものと考える。初学者は自分の研究分野の位置づけを知り、学習を進める助けとしてもらいたい。

人工知能学会「AIマップβ2.0 （2023年5月版）」[^AI.map]の一部
技術の観点、課題の観点などいろいろなマップがありますがその一つ「AI研究の現在」のマップ。

ほら、AIには機械学習以外にもルールベースがあるよくらいでサラッと説明されることが多いですが、ルールベース以外にも。深層学習=AIでもなく機械学習=AIでもない、広い広がりがある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116049/f05cad81-5881-f726-d506-a9eb11e23433.png)

[^AI.map]: 人工知能学会. “AIマップ”. 人工知能学会． https://www.ai-gakkai.or.jp/aimap/, (参照 2024-04-21)．

### 機械学習との違い
機械学習と深層学習の違いは何かでよく出てくる図ですね。
前述の通り人工知能(AI)の技術の一部として機械学習があり、そのアルゴリズムの一部としてニューラルネットワークがある。ニューラルネットワークを多そうにしたものが深層学習と呼ばれるので図のような包含関係です。

```mermaid
graph LR
 subgraph AI
  subgraph 機械学習
   subgraph ニューラルネットワーク
    subgraph 深層学習

    end
   end
   ml1("サポートベクターマシン")
   ml2("ランダムフォレスト")
   ml3("etc")
  end
  ai1("ルールベース")
  ai2("etc")
 end
```

### 予測AI・生成AI

:::note warn
- 機械学習→深層学習→生成AIと進化している、下図のような包含関係と説明している資料も見受けられます。
    - 後述の通り、生成AIとしては深層学習以外を使うものもあります。深層学習があまりにも猛威を振るっているので、AI=深層学習、生成AI=深層学習のような誤解の一つと思います。

    ```mermaid
    ---
    title: こういう図を見るが間違いかミスリード
    ---
    graph
     subgraph AI
      subgraph 機械学習
       subgraph ニューラルネットワーク
        subgraph 深層学習
         subgraph 生成AI
         end
        end
       end
      end
     end
    ```
:::

- 予測AIと生成AIを分けて考える
    - 今までは予測AIが主に進展してきたので、AI=予測AIのようになっておりましたが、ここにきて生成AIが急速に進展し議論がごっちゃになっている資料等があります。
    - 予測AI、生成AIと分けて考えたほうがわかりやすくなると思います。
        ```mermaid
        graph
         subgraph AI
          subgraph 予測AI
          end
          subgraph 生成AI
          end
        
         end
        ```
- 明示している資料が見つからずざっくりですが下記なイメージかと思います。

    ```mermaid
    graph LR
        subgraph AI
            subgraph ML["機械学習"]
                ml1["深層学習以外の機械学習"]
                dl["深層学習"]
            end
                 
            MM["エージェント"]

    
        end
        dl -.->|生成|ge(["「生成AI」と呼ぶ"])
        MM -.->|生成|ge
        ML -.->|予測|pd(["「予測AI」と呼ぶ"])
        MM -.->|予測|pd
    ```
    注）深層学習以外の機械学習で生成しないことはないがあまり聞かない。
    注）「進化計算」「遺伝的アルゴリズム」なども生成AIとなる場合があるが、AIマップでは機械学習に含まれているのでそれにならった。


# 機械学習とは

## 機械学習の定義

> 機械学習（きかいがくしゅう、英: machine learning）とは、経験からの学習により自動で改善するコンピューターアルゴリズムもしくはその研究領域で[1][2]、人工知能の一種であるとみなされている。[^Wikipedia.ML]

「自動」をどう捉えるかですけれど、あれこれ手間がかかるよね、、、わたしが扱っているのは機械学習じゃないのか、、、

[^Wikipedia.ML]: Wikipedia. "機械学習". Wikipedia. 2024-07-30. https://ja.wikipedia.org/wiki/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92, (参照 2024-09-01).

## 機械学習の歴史
AIの歴史、深層学習の歴史と被るので略。AI、機械学習、深層学習もオーバーラップがあるので明確には分けられず歴史もこれはこっちと言えないが、

- ニューラルネットの始まりが機械学習の始まりと一緒でいいと思う
- 何やかんやあって
    - サポートベクターマシン
        - 1963　線形で提案
        - 1992　非線形で提案
    - アンサンブル学習
        - 1990年代
- 深層学習の直近の歴史がほぼイコールで機械学習の歴史

:::note warn
- 回帰分析はAI?
    - 回帰分析をAIに含めると19世紀のゴルトンまでさかのぼる
    - 回帰分析は流石にAIではない？
    - でも機械学習と題する本にはたいてい回帰分析が載ってますよね
    - 機械学習はAIに含まれるなら回帰分析もAI?
    - 最小二乗法で係数を計算しているだけだろ
    - でも深層学習だって複雑ではありますがアルゴリズム通りに重みを計算しているだけですよね
    - AIからはみ出す機械学習の分野があると理解すれば良い?
    - ずーっとモヤってます誰か教えて‼️
:::

## 機械学習の分野
### 統計学との違い

TJOさんの記事[「統計学と機械学習の違い」はどう論じたら良いのか](https://tjo.hatenablog.com/entry/2015/09/17/190000)の説明が一番しっくりきます。

https://tjo.hatenablog.com/entry/2015/09/17/190000

### 〇〇学習
ざっと、下記のような〇〇学習が出てきて面食らいますよね。
- 機械学習
- 教師あり学習
- 半教師あり学習
- 教師なし学習
- 強化学習
- 深層学習（ディープラーニング）
- 多様体学習
- 転移学習
- オンライン学習
- バッチ学習
- 表現学習

私の記事で恐縮ですが、[ヤバいデータ分析（書籍・記事であまり扱われてないが重要なこと）-2. 〇〇学習](https://qiita.com/aokikenichi/items/9d829910efd5dff0b79f#2-%E3%80%87%E3%80%87%E5%AD%A6%E7%BF%92)が参考になると思います。

https://qiita.com/aokikenichi/items/9d829910efd5dff0b79f#2-%E3%80%87%E3%80%87%E5%AD%A6%E7%BF%92

#### 教師あり学習・教師なし学習
ということでまずは教師あり、教師なしに着目するとわかりやすいと思います。それらも分類・回帰・クラスタリング・次元削減に分かれます。


##### 分類・回帰・クラスタリング・次元削減
- 機械学習の手法
```mermaid
graph LR
 md(機械学習) --> t(教師データがある)
 t --> oco(目的変数が連続値)
 oco --> re[回帰]
 t --> oca(目的変数がカテゴリ値)
 oca --> cl1["分類(判別)"]
 md --> f(教師データがない)
 f --> cl0(クラスに分ける) --> cl[クラスタリング]
 f --> d(大量の変数を絞る) --> dd[次元削減]
```

###### 代表的なアルゴリズム
- 重回帰
- ロジスティック回帰
- 木
- サポートベクターマシン
- アンサンブル
    - ランダムフォレスト
    - ブースティング
- ニューラルネットワーク
    - 深層学習

この辺りは、昔私が書いた記事で古くなっているところもありますが[氷解！データ分析、機械学習手法ってたくさんあるけどいつどれを使えばよいのか](https://qiita.com/aokikenichi/items/688e66d10a944051039c)が参考になると思います。

https://qiita.com/aokikenichi/items/688e66d10a944051039c

# 深層学習とは
## 深層学習の定義
ニューラルネットワークのうち層が多いものですね。
これも明確な定義はなく、入力層と出力層をのぞいた中間層が3層以上を深層学習と呼ぶことが多そう。
でも実際に使われている深層学習のモデルは数十から数百層だったりしますね。

## 深層学習の歴史

Wikipedia. "ニューラルネットワーク#歴史"[^Wikipdia.nn]、Wikipedia. "ディープラーニング#歴史"[^Wikipdia.dl]による。

```mermaid
gantt
    title 深層学習の歴史
    dateFormat YYYY
    axisFormat %Y
    section 先期
    
        形式ニューロン　　　　:a1, 1943, 1y
        パーセプトロン           :a2, 1958, 1y
        単純パーセプトロンは線形分離不可能なパターンを識別できない:a3, 1969, 1y
    section 冬の時代<br/>(ディープラーニングの基礎づくり)
        冬の時代          :b1, 1970, 42y
        ネオコグニトロン（のちのCNN)　　　　　　　　:b2, 1979, 1y
        ホップフィールド・ネットワーク（RNN）:b3, 1982, 1y 
        ボルツマンマシン:b4, 1985, 1y
        誤差逆伝播法（再発見）:b5, 1986, 1y
        CNNを音素や文字の認識に使用:b6, 1988, 1y
        LeNet-5(CNN直系の元祖):b7, 1998, 1y
        オートエンコーダ、ディープ・ビリーフ・ネットワーク:b8, 2006, 1y
    section ディープラーニングの時代
        AlexNet「目の獲得」:c1, 2012, 1y
        Googleの「猫」:c2, 2012, 1y
        word2vec: c3, 2013, 1y
        ニューラル機械翻訳:c4, 2014, 1y
        DQN:c5, 2015, 1y
        AlphaGo:c6, 2016, 1y
        Graph Convolutional Network: c7, 2017, 1y        
    section 生成AI
        GAN:d1, 2014, 1y
        Attention/Transformer: d2, 2017, 1y
        Stable Diffusion:d3, 2022, 1y
        ChatGPT:d4, 2023, 1y
```

[^Wikipdia.nn]: Wikipedia. "ニューラルネットワーク#歴史". Wikipdeia. 2024-01-07. https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF#%E6%AD%B4%E5%8F%B2, (参照:2024-04-27)
[^Wikipdia.dl]: Wikipedia. "ディープラーニング#歴史". Wikipdeia. 2024-04-17. https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0#%E6%AD%B4%E5%8F%B2, (参照:2024-04-27)

## 深層学習の分野
### 様々なモデル
ここでは深層学習の理論に深く入るつもりはないので、ざっくりと。
初期の深層学習は層の間でニューロンが互いに全部繋ぎ合わさっているものが多かったと思います。でも現在は目的に応じて、直列に繋いだり、途中でニューロンを増やしたり減らしたり色々なものが提案されています。ちょっと古いですがわかりやすい記事があるので、

[ニューラルネットワークの動物園 : ニューラルネットワーク・アーキテクチャのチートシート(前編)](https://postd.cc/neural-network-zoo/)
[ニューラルネットワークの動物園 : ニューラルネットワーク・アーキテクチャのチートシート(後編)](https://postd.cc/neural-network-zoo-latter/)

https://postd.cc/neural-network-zoo/

https://postd.cc/neural-network-zoo-latter/

### 適用分野
テーブルデータに深層学習を適用することもありますが、自然言語処理、画像処理（動画も）、音声処理などが隆盛を誇ってますね。

#### 自然言語処理
ざっくり言うとコンピューターで自然言語は直接扱えないからこんな感じだった。

```mermaid
graph
a(自然言語は<br/>直接扱えない) --> b(単語に分けて頻度を)
c(オントロジーでだな) -.-> b
d(いやいや言語学の知見を) -.-> b
```
言語商会さんの[自然言語処理の餅屋](https://www.jnlp.org/nlp/)リンク集が役に立つよ。全部ある感じ。

https://www.jnlp.org/nlp/

##### word2vec
略しますがn-gram（単語のつながり）を見ていけばちょっと役に立つじゃん→でもnを増やしていくと計算爆発とかあったりして、

2013年に革命的なword2vec[^MIKOLOV.2013]が発表される。

```mermaid
graph
a(自然言語は直接扱えない) -->|ベクトルにしちゃえば計算できんじゃん|b(word2vec)
```

```
king - man + woman = queen
```
- 王から男性を引き王・王女的な概念に、女性を足すことで女王を意味する
    - つまり、言葉を計算で扱えてしまうと言うこと。今まではほとんど頻度のみで文章を「理解」しようとしていたが、「意味理解」は出来ないけれどそれに近いことを計算で扱ってしまうという。つまりコンピューターが苦手だった自然言語処理をコンピューターが得意な計算に落とし込んでしまえるという革命。

ちょとむずいかもですが、[Word2Vecを理解する](https://qiita.com/g-k/items/69afa87c73654af49d36
)この記事などが参考になるかと。

https://qiita.com/g-k/items/69afa87c73654af49d36

[^MIKOLOV.2013]: MIKOLOV, Tomas. Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, 2013. https://arxiv.org/abs/1301.3781

##### Attention/Transformer

でもさ遠く離れたところで否定語があったりむずいなーと言うところにさらなる革命。
事前に、文章の重要なところに重み（Attention）をつけながら学習を繰り返して大規模言語モデル(以下、LLM）を作っておけばいいんじゃね？みたいな感じでしょうか。

```mermaid
graph TB
a(自然言語は直接扱えない) -->|ベクトルにしちゃえば|b[word2vec] --> c(文章を丸ごと理解はむずい)
c -->|事前に大量に学習しておこう|Transformer
    subgraph Transformer
        direction TB
        t0{{大量の文書}} --> l
        subgraph l[学習]
            direction TB
            t1[エンコーダーモデル]
            t2[デコーダーモデル]
            t3[エンコーダー・\nデコーダーモデル]
        end
        l -->|重要なところに\nラインマーカー的に重み|d[Attention]
        d -->|重みを反映して\n再度学習|l
    end
    Transformer --> LLM
```


有名なAttention Is All You Need[^VASWANI.2017]を初心者用に優しく解説した記事の和訳。
[ゼロからのTransformer](https://zenn.dev/skypenguins/articles/a7b4cfee63b67c)

https://zenn.dev/skypenguins/articles/a7b4cfee63b67c

AttentionとTransformerに関してはこれが一番わかりやすいと思う。

自分でコーディングして試してみたい方はHuggingFaceのNLPコース

https://huggingface.co/learn/nlp-course/ja/chapter1/1

が分かりやすいです。

[^VASWANI.2017]: VASWANI, A. Attention is all you need. Advances in Neural Information Processing Systems, 2017. https://arxiv.org/abs/1706.03762

##### LLM（大規模言語モデル）
###### エンコーダー、デコーダー、エンコーダー・デコーダー

- エンコーダー・デコーダーモデル
    - 概要
        - エンコーダーは文書から意味（ベクトル）を得る
        - そのベクトルの集まりがその文書の「意味の塊のようなもの（ベクトル表現）」
        - デコーダーがそこから人間が読める文書に戻す
            - できるだけ元の文書の意味に戻っていれば「文書の意味の塊のようなもの」がその文書の意味を適切に表しているという考え方
            - 必要に応じ言語を変えれば翻訳に、生成文書の長さを変えれば要約などとなる
    - 強み
        - 翻訳
            - 英語でエンコーダーを回して日本語でーデコーダーを回せば英日翻訳ができる
        - 要約
            - 「意味の塊のようなもの（ベクトル表現）」を短く生成すれば要約となる

        ```mermaid
        graph 
            a{{大量の文書}} --> en[\エンコーダー/]
            en --> b[文書の意味の塊のようなもの]
            b --> de[/デコーダー\]
            de --> c{{文書}}
        ```


- エンコーダーモデル
    - 概要
        - 文書から意味の塊のようなもの（ベクトル表現）を得る
    - 強み
        - 文書分類
            - 「意味の塊のようなもの（ベクトル表現）」に分類のラベル付の学習をすれば文書分類や質問応答、類似性スコアを学習すれば類似性検索、感情付の学習をすれば感情分析、が可能
        ```mermaid
        graph 
            a{{大量の文書}} --> en[\エンコーダー/]
            en --> b[文書の意味の塊のようなもの]
        ```

- デコーダーモデル
    - 概要
        - 文書から次の単語を予測するような学習をする
        - デコーダーがそこから人間が読める文書に戻す
    - 強み
        - 文書生成
            - まさにデコーダーで文書生成を行えるので、文書生成、対話生成、ストーリー生成など自然言語生成全般に用いられる

        ```mermaid
        graph 
            a{{大量の文書}} --> b[次の単語を予測するような学習]
            b --> de[/デコーダー\]
            de --> c{{文書}}
        ```

- 代表的なLLM

```mermaid
graph
    subgraph d[デコーダーモデル]
        d0[文書生成に強い\n生成AIのLLMはこれ]:::leg
        d1[GPT]
        d2[Claude]
    end
    subgraph e[エンコーダーモデル]
        e0[文書分類に強い]:::leg
        e1[BERT]
        e2[RoBERTa]
    end
    subgraph de["エンコーダー・デコーダーモデル"]
        de0[翻訳・要約に強い]:::leg
        de1[BART]
        de2[T5]
    end

    classDef leg fill:#fff,stroke:#ffd
```

    
    
で現在大量のLLMが公表されてます。樹形図を描いている人もいてこんな感じ。

![Evolutionary Tree](https://camo.qiitausercontent.com/0425af29400caa2049a1bc3edbbadc5ce3644787/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f4d6f6f6c6572303431302f4c4c4d7350726163746963616c47756964652f6d61696e2f696d67732f71725f76657273696f6e2e6a7067)[^LLM.tree][^YANG.2023]

- <font color="darkblue">青色：デコーダーモデル</font>
- <font color="green">緑色：エンコーダー・デコーダーモデル</font>
- <font color="pink">桃色：エンコーダーモデル</font>
- <font color="gray">灰色：その他</font>

[^LLM.tree]: Mooler0410. "The Practical Guides for Large Language Models". GitHub. 2023-05-08. https://github.com/Mooler0410/LLMsPracticalGuide, (参照 2024-08-31)
[^YANG.2023]: YANG, Jingfeng, et al. Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and beyond, 2023. arXiv preprint arXiv:2304.13712, 2023. https://arxiv.org/abs/2304.13712

一覧表だと

[Wikipeda: 大規模言語モデル](https://ja.wikipedia.org/wiki/%E5%A4%A7%E8%A6%8F%E6%A8%A1%E8%A8%80%E8%AA%9E%E3%83%A2%E3%83%87%E3%83%AB)

- 主だったモデルがある。みんなで更新するから早いのかな？

https://ja.wikipedia.org/wiki/%E5%A4%A7%E8%A6%8F%E6%A8%A1%E8%A8%80%E8%AA%9E%E3%83%A2%E3%83%87%E3%83%AB


そう、LLMは大規模言語モデルなので必ずしも生成AIのモデルではなく、それを含んだ全体の概念。

生成系のLLMに特化するとOpenAI(GPT)/Anthropic(Claude)/Google(Gemini)に限定しているけれど例えばこれなどがわかりやすいかと。

[【随時更新】主要な大規模言語モデル比較表](https://zenn.dev/ml_bear/articles/3c5e7975f1620a)


https://zenn.dev/ml_bear/articles/3c5e7975f1620a

##### 実装環境
###### プラットフォーム
- [Hugging Face](https://huggingface.co/)
    - LLM（大規模言語モデル）のデータセットやモデルのリポジトリとして利用されるほか、自然言語処理のためのツールキットも提供するプラットフォーム。
    - [hugging faceの紹介](https://zenn.dev/yoshikawat64m/articles/6c7862ad376368)などがわかりやすそうです。

https://zenn.dev/yoshikawat64m/articles/6c7862ad376368

###### ライブラリ

- [transformers](https://github.com/huggingface/transformers)

    :::note warn
    TransformerとTransformersは名前が似ていて間違いやすいが、次のように異なる。
    
    - Transformer
        - 自然言語処理やその他のタスクで使用されるアーキテクチャ（アルゴリズム）。Attention機構を用いたモデルで、特に長距離依存関係の処理に強い。
    - transformers
        - Hugging Face社が提供するオープンソースのライブラリ。Transformerを含む多くの自然言語処理モデル（BERT、GPT、T5など）を簡単に利用できるようにするためのツールキット。特に大規模言語モデル（LLM）の活用に強みを持つ。
    

<br/>

- [LangChain](https://www.langchain.com/)
    - LLM（大規模言語モデル）と他のシステムの入出力やUIをつなぐためのワークフローを構築するライブラリ。例えば、チャットボットでの自然な対話や、データベースと連携して質問応答するアプリケーションの構築に利用されます。
    - 詳しくは、[そろそろ知っておかないとヤバい？ 話題のLangChainを30分だけ触って理解しよう！](https://qiita.com/minorun365/items/081fc560e08f0197a7a8)などがわかりやすそうです。

https://qiita.com/minorun365/items/081fc560e08f0197a7a8

#### 画像・動画・音声など
今回は自然言語系メインなのと良記事がたくさんあるので、さらっと。
カンブリア爆発ですね。

- 2012
    - Googleの猫
    - 画像認識コンペで圧勝


# 生成AIとは
## 生成AIの定義
これも厳密な定義はない。

> 生成AIは、Generative AIと呼ばれ、プロンプトに従う形で文章や画像、動画などが作られていくAIです。私たちがおこなえばいいのはプロンプトで指示を出すだけで、あとは生成AIがプロンプトに応える形で出力します。[^GenerativeAI]

[^GenerativeAI]: 生成AI活用普及協会. "生成AIと従来のAIとの違いとは？それぞれの特徴や仕組み、メリット・デメリットをわかりやすく解説". Generative AI Media. 2024.03.27. https://gen-ai-media.guga.or.jp/glossary/difference-between-generative-ai-and-ai/, (参照 2024-09-01)

> 生成モデリングは機械学習の一分野であり、与えられたデータセットに似た新しいデータを生成するようにモデルを調整することを取り扱う。[^Foster.2024]

[^Foster.2024]: David Foster. 生成Deep Learning 第2版. オライリー・ジャパン. 2024, 477p.

## 生成AIの歴史

どこまでを生成AIというか微妙（私がついていけてない）のとあまり明示的なものを見つけられなかったのでかなり略してます。

```mermaid
gantt
    title 生成AIの歴史
    dateFormat YYYY
    axisFormat %Y
    section 深層学習以前
        ELIZA　　　　:1965, 1y
        セル・オートマトン、ライフゲーム: 1980, 10y
        隠れマルコフモデルによる自然言語生成: 1990, 10y
        統計的な自然言語翻訳など: 2000, 10y
    section 深層学習隆盛後
        VAE: 2014, 1y
        GAN: 2014, 1y
        拡散モデル: 2015, 1y
    section 最近の進展
        GPT-3: 2020, 1y
        DALL-E: 2021, 1y
        Stable Diffusion: 2022, 1y
```

## 生成AIの分野
### 理論
#### 深層学習
現在は深層学習による生成AIが流行ってますね。以下「適用分野」に書きます。

#### 深層学習以外
「予測AI・生成AI」で書いたように深層学習以外でも生成AIと呼ばれる研究は古くからあります。
AIマップの中でのカテゴリで生成AIに関連するのは

- セルオートマトン

> フランシス・ビトンティがライフゲームのアルゴリズムを使用して靴のデザインを自動生成させた。生成させる度に色のグラデーションやフォルムがわずかに異なる仕様。[^Wikipedia.cell]

[^Wikipedia.cell]: Wikipedia. "セルオートマトン". Wikipedia. 2024-08-02. https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%AB%E3%83%BB%E3%82%AA%E3%83%BC%E3%83%88%E3%83%9E%E3%83%88%E3%83%B3, (参照 2024-09-01).

- マルコフモデル

> 前回までに青空文庫から梶井基次郎の著作をダウンロードしたり、形態素解析を行うためにMeCabをインストールしたりしてきました。今回は、いよいよこのデータを使って文章を生成してみます。といっても、まだディープラーニングの分野には踏み込むことはしません。ここでは「マルコフ連鎖」と呼ばれる手法を使って、文章を生成してみるだけです。[^@IT]

[^@IT]: かわさきしんじ. "［文章生成］マルコフ連鎖で文を生成してみよう". @IT. 2021-02-19. https://atmarkit.itmedia.co.jp/ait/articles/2102/19/news026.html, (参照 2024-09-01).


- 遺伝的アルゴリズム
> 絵や音楽は、コンピュータの限りない表現力に協和し過去に例のない新たな世界へと広がり始めている。音楽は、絵や言葉といった他の表現手段と比べ、専門的な要素が多いため別な意味での難しさがあり、表現する人の複雑な経験から生まれるものであるから、その構造は非常に複雑なものであるといえる。本論文では、数ある過去の音楽等から和音進行をサンプルデータとして用い、それを元に音楽の経験情報をネットワーク状に蓄積する。そして、その経験情報を遺伝的アルゴリズム(Genetic Algorithm : GA)の評価選択部分に用いて、自動的に作曲するシステムを構築しようと試みている。本システムを大きく分けると、経験をデータとして蓄積しておく「経験データ蓄積システム」、和音進行を作成する「コード進行作成システム」、そしてメロディを作成する「メロディ作成システム」の三つから構成されている。[^Yamada.1998]

[^Yamada.1998]: 山田拓志. "遺伝的アルゴリスムを用いた自動作曲について". CiNii. 1998-10-17. https://cir.nii.ac.jp/crid/1573950401759195264, (参照 2024-09-01).

- フラクタル

> 近似的なフラクタルな図形は、自然界のあらゆる場面で出現されるとされ、自然科学の新たなアプローチ手法となった。逆に、コンピュータグラフィックスにおける地形や植生などの自然物形状の自動生成のアルゴリズムとして用いられることも多い。

[^Wikipedia.fractal]: Wikipedia. "フラクタル". Wikipedia. 2024-06-02. https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%AB, (参照 2024-09-01).

また、画像生成AIに限りますがこれらの記事が深層学習以外でも生成AIがあるということについて詳しいです。

[画像生成AIの誕生と変遷(1)初期の画像生成技術](https://note.com/o_ob/n/ncc2c86708c6e)

https://note.com/o_ob/n/ncc2c86708c6e

[画像生成AIの誕生と変遷(2)画像生成技術の歴史年表](https://note.com/o_ob/n/n971483495ef3)

https://note.com/o_ob/n/n971483495ef3

### 適用分野
#### 自然言語処理
##### LLM
というわけでやっとここまでたどり着きました。
- 既述の通り、生成AIは深層学習だけでなくいろいろありますが、深層学習で大規模に自然言語を事前学習した大規模言語モデルLLMが今一番ホットなテーマですね。
- またこれも既述のとおり、LLMもChatGPTのように文書生成や質問応答するだけではなく、翻訳、要約、文書分類などいろいろ使われます。
- ここでは**深層学習を用いた、生成AIとしてのLLMについて話すよ**ってわけです。

##### プロンプトエンジアリング・RAG・ファインチューニング
- プロンプトエンジニアリング
    - 聞き方を工夫すると得たい答えが返ってくるから工夫しよう
- RAG
    - 問い合わせに主に使う関連文書をDB化して、そこに検索を掛けた結果を含めてLLMに問い合わせるみたいなもの
        - 社内のドキュメントとかの情報もプロンプトに書けばいいQAになんじゃん
        - えっ毎回書くの？
        - そうだ、社内ドキュメントDBに検索かければいいじゃん
            - プロンプト＋検索結果でLLMに聞けば精度いいはずじゃん
- ファインチューニング
    - 大規模言語モデルって言っても世の中全ての文書で学んでいるわけじゃないから、専門分野を追加で学習させよう

よくある解説としては

||プロンプトエンジニアリング|RAG|ファインチューニング|
|:--|:--|:--|:--|
|準備のコスト|小|中|大|
|精度|小|中?|大?|
|イメージ|人と同じで具体的小分けで尋ねる、指示する|マニュアルを読みつつ対応するとか、テキスト持ち込みで試験を受けるとか|大卒で一通りの知識はあるけれど新しい業界の勉強をさせる|

だったですけれど、3手法とも色々やりようがあるよね、RAGのやりようによってはファインチューニングよりも精度いいんじゃねみたいなところが出てきていて下記記事、

- [RAGのSurvey論文からRAG関連技術を俯瞰する](https://sue124.hatenablog.com/entry/2024/07/02/233616)
    - RAG研究のサーベイ論文（プロンプトエンジニアリングとファインチューニングとの比較あり）で、
        - RAGの方が精度いいよね
        - でもプロンプトエンジニアリング＋RAG＋ファインチューニングを組み合わせるのが一番いいよね
            - 当たり前か（でもテキスト持ち込み試験でも単にテキスト持ち込んだだけじゃ全然解けなくて自分なりのいい意味のカンニングペーパーを自作して持ち込んだ方が結果がいいとかLLMも人間味ありすぎない！？）
    - ちょっと専門すぎてついていけないところもありますがこの解説記事ならわかりやすいかと（興味ある論文→引用論文50本も読まなきゃだ→サクッとまとめてみんな読んでね、なんていう素敵なレベルに私もなりたい）

https://sue124.hatenablog.com/entry/2024/07/02/233616

###### プロンプトエンジニアリング
たくさん記事が出てますが、一つだけ。
- [Prompt Engineering Guide](https://www.promptingguide.ai/jp)
    - 最初期からあるガイドの日本語版。記述途中やページがないところもあるけれど主要なところは問題なし。
    - プロンプトエンジニアリングの紹介サイトや書籍はたくさんありますが、まずはここからが王道では？（松尾研でも推奨していたらしい）

https://www.promptingguide.ai/jp


###### RAG
たくさん記事が出てますが、一つだけ。

- [RAGの実装戦略まとめ](https://qiita.com/jw-automation/items/045917be7b558509fdf2)
    - アンチョコにも色々作り方があるよね的な

https://qiita.com/jw-automation/items/045917be7b558509fdf2

###### ファインチューニング
たくさん記事が出てますが、一つだけ。

- [【ChatGPT】ファインチューニングをわかりやすく解説](https://qiita.com/ksonoda/items/b9fd3e709aeae79629ff)
    - じゃ何をどうやって追加で学習するのか的な

https://qiita.com/ksonoda/items/b9fd3e709aeae79629ff


##### サービス
LLM自体はインターフェースがあるわけではないのでプログラムを組んで問を与えると答えてくれるわけですがそれでは使いずらいので、インターフェースをつけて使いやすくサービス提供されているのがChatGPTなりCopilotなりGeminiですね（とか他のサービスに組み込まれたQ&Aの仕組みなど）。
提供方法として主に2種類あり
- API
    - プログラムでのやり取りをしやすくしたコンセントみたいなものですね。
    - これを用いて各ベンダーがQ&Aの仕組みなどにLLMを用いてサービス提供するわけです
- Chatサービス（←名前これでいいのかな）
    - 質問をするボックスがあり、それに対応して答えを返してくれてプログラムの必要なしってわけです。
    - 今代表的なのは
        - ChatGPT、Copilot、Gemini、Claude Perplexityなどですね。

ちょっと古い記事恐縮ですが
[「ChatGPT」「Copilot」「Gemini」「Claude」「Perplexity」の性能を日常的な会話で評価した結果が公開される](https://gigazine.net/news/20240528-ai-chatbot-ranking/)
- どの分野でも満遍なくではなくサービス（の中にあるLLM）により分野の得手不得手があるのが面白いですね。

https://gigazine.net/news/20240528-ai-chatbot-ranking/

料金と最新性能比較とかは早すぎて私がついていけずChatGPT-4oの課金しか使っていない私がお送りしました。

#### 画像・動画・音声など
今回は自然言語系メインなのでさらっと。
- 2014 変分オートエンコーダーVAE、敵対的生成ネットワークGAN
    - ゴッホ風の絵が描けるよにびっくりとか
- 2015 拡散モデル
- 2020 Stable Diffusion
    - テキストで指示したら高度な絵が描けるよとか
- 2024 Sora
    - 綺麗な動画にびっくりとか

##### GAN
何それって最初思わなかった？生成するモデルと判定するモデルを競争？繰り返して精度を上げていくっての。

[今さら聞けないGAN（1）　基本構造の理解](https://qiita.com/triwave33/items/1890ccc71fab6cbca87e)

https://qiita.com/triwave33/items/1890ccc71fab6cbca87e


##### Diffusion
これこそ何それ。ノイズを少しずつ加えていけばノイズ画像になるから、そこから少しずつノイズを減らしていけば元の画像まではギリわかるけれどそれで違う画像も生成できるっての。みんな分かった気でごまかしてない？**私は理解できていない。こんな記事を偉そうに書いていながらまだ**

[世界に衝撃を与えた画像生成AI「Stable Diffusion」を徹底解説！](https://qiita.com/omiita/items/ecf8d60466c50ae8295b)

https://qiita.com/omiita/items/ecf8d60466c50ae8295b