「AIってつまりDBですよね」←！？

「AIってつまりDBですよね」
僕「ちがいます」

どうやら、世の中にはAIとDBを同列のものだと考える人もいるようです。

（前回記事の続きです。AIの未来を本気で憂えているので、同感の方はLGTMお願いします）

https://qiita.com/numekudi/items/20b287a5b23502bf2168

## DBだと語る人の意見と正解
- AIは学習データを丸暗記している
- 学習データは選択できるのだから、出力もコントロールできる
- 追加学習とかファインチューニングって知識を上乗せしているんでしょ

**...全部違うぜ！正解は**

- AIはデータの特徴からパターンを学習している
    - これにより柔軟性を得る
- 出力はコントロールできない
    - 演繹ではなく帰納だから
- （一般的に）追加学習はネットワークの全体を、ファインチューニングは出力に近いネットワークを調整する
    - DBのレコード追加、削除のような簡単な話ではない


## DBだと捉えた場合の弊害

### 「学習した内容は確実に取り出せる」
「学習したことなら完璧にできるでしょ？」
これは誤りです。
どれだけ複雑なモデルを用意しても、誤差が0になることはありません。
授業で回帰直線を書いたことがあると思いますが、すべてのデータポイントを通る直線を引くことはできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1977360/c232dda3-7851-33fe-03b1-ad3fb7f4b0ad.png)


曲線なら？非線形なら？
どんなモデルを使用しようと、実際の因果と予測モデルの仕組みが異なる限りいたちごっこです。



### 「学習していないデータを入力すると異常な出力になる」
「学習していないデータに対する出力は何らかの異変があるはずだ」
そうとは限りません。
多くのモデルで「どうなるかわからない」が正しいです。


例：スパイラルデータの二値分類タスク



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1977360/53b5eb18-f81d-5454-337b-33ad53dfbb93.png)

シード値以外同条件で実施 その1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1977360/6b3e3105-9f8f-96c7-91a4-1147ddac97c8.png)
シード値以外同条件で実施 その2
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1977360/69746669-c6e0-cf10-ee0d-8c23080b5e55.png)

学習データがない場所でも、なんの変哲もなくどちらかに分類します。

例えばLLMにおいては、「文法は大量に学習したので合っているが、選択される名詞が誤っている」などが発生し、ハルシネーションの一つとして知られています。（特に生成モデルにおいては、ドンピシャに正解を当てることが目的ではなく次トークンの分布を出力するので揺らぎを許容します。実運用上ではtemperatureを低めに設定するので実質的に分類と同じになりますが...）


ちなみに、学習データ範囲外の特徴は外挿領域と呼ばれます。
外挿領域は未定義動作を引き起こします。

https://x.com/nomu_chem/status/1839831473391841605

↓ここから遊べます

https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=spiral&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.63550&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false


### 「誤りは確実に直せる」
「学習しているのになんでできないんだ？」
僕「モデルかデータが悪いと思います」
「じゃあ直して」
僕「無理です...」

> AIを使うことで、非常に高い精度を得られますが、100％ではありません。ソフトウェア工学の世界から来たステークホルダーの多くは、これをバグとして扱い、100％正しいものしか受け入れようとしません。彼らは、どんなAIシステムも、間違った出力をすることがあるという事実を理解していません。

引用元:

https://learning.oreilly.com/library/view/shi-jian-zi-ran-yan-yu-chu-li-shi-shi-jie-nlpapurikesiyonkai-fa-nobesutopurakuteisu/9784873119724/ch11.xhtml#:-:text=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E5%B7%A5%E5%AD%A6%E3%81%AE%E4%B8%96%E7%95%8C%E3%81%8B%E3%82%89%E6%9D%A5%E3%81%9F%E3%82%B9%E3%83%86%E3%83%BC%E3%82%AF%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E3%81%AE%E5%A4%9A,%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E6%8B%A1%E5%BC%B5%E7%9F%A5%E8%83%BD%E3%81%A8%E3%81%97%E3%81%A6%E6%89%B1%E3%81%86%E3%81%AE%E3%81%8C%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%80%82

機械学習では「あちらを立てればこちらが立たず」が高頻度で発生します。特に深層学習では決まったサイズのパラメータを調整するので、当然と言えば当然なのかもしれません。


ラプラスの悪魔がいたら
- すべてのニューラルネットワークのウエイト&バイアス
- 将来運用環境で入力されるすべての未知データ

これらすべてが見通せるのでできるかもしれません。

人間には不可能ですね...
LLMは枝刈りができる一方、非常に重要なウエイトがあることも事実です。パラメータを変えたら全く異なる挙動になる可能性が十分にあるのです。

https://ledge.ai/articles/super_weight_llm_discovery


加えて、実運用で入力されるデータは完全に未知なので、その場限りの修正ができたとしてもワークしないでしょう。
モデルは作った瞬間に世界と切り離され劣化するのです。


## Ex.

上記の理由より、モデルの誤った出力について「なぜなぜ分析攻撃」をするとデータサイエンティストは簡単に病みます。すべては確率だからです。（僕は実際に製造業向け物体検出タスクで病みました）

確率ゆえに、無限の猿定理によってすべての可能性を否定することもできません。
完全ランダムにトークンを吐き出すLLMでも、運が良ければ期待するテキストが出てきてしまうからです。（もちろんハッシュが衝突するより可能性と同様、考慮するべきでない。ほぼゼロ。）

tranformerではQuery, Key, Valueといったワードが出るけどこれはまたDBとは別のお話。

データとモデルについて議論することが最も有意義です。