見出し画像

野良DSの適当な解説~知らないデータが来たときの振る舞い

最初のQA

質問)とんでもないデータの質問が来たときに機械学習ってどんな回答するの?
回答)むりやり知っている範囲で回答するよ。

解説しよう

機械学習のモデルは、知っている範囲でしかそもそも回答が出来ません。そんなもんです。だから、知らない範囲の質問が来ても、むりやり知っている範囲で答えます。将来的には変わるかもしれないし変わってくれないと困るんですが、今のところはそうなる見込みは薄いですね…

例えばどんな回答するの?

犬と猫の写真でしか学習していないのに奈良の大仏の写真を見せたとしましょう。

犬ですね。70%ぐらいの確信度で。

なーんて回答します。

確信度があるから信用できると思っていたのに。

それはあくまでも、知っている範囲での話。知らない範囲のデータが来たら、確信度も当てになりません。確信度の計算方法は色々。例えば、ニューラルネットワークの分類問題などで多用される Softmax 関数なんてあります。本とかを読むとこれで確率が出ますなんて凄まじいことが書いてあったりする事もありますが、大仏の写真が 70% の確率で犬ですなんてことはどう考えたって無い。でも、犬の写真を見せれば80%の確率で犬ですってなります。大仏の時はどうにも信用ならなかったのに、犬になった途端に、なんかそれっぽい。何が違うんでしょうか。

実のところ、かなり乱暴な説明になりますが、softmax 関数はいろんな数値で結果が得られ、その数値の大きさが値に影響を与えるという時に使うものです。
大抵のニューラルネットワークもそんな感じの出力なんですよね。でも、色々バラバラで困るので、softmax で値をそろえてわかりやすくしている。そんなイメージです。
なにせ、softmax を通すと結果の和が1になり、非常に調子が良いのです。でも、和が1なだけで、確率なんて要素は無いです。
ただ、強さを適当に割り振って、ま、確率って考えても大体OKでしょって感覚で使ってます。

だから、2クラス分類問題なんかだと、1という数字を犬と猫に適当に割り振ります。だから、実は大仏の写真を与えたとしても、犬猫どっちかのラベルが結構な数字になっちゃいます。だから、大仏の写真が70%の確率で犬ですなんて事になるわけです。

拡大解釈をすれば、大仏を犬もしくは猫として解釈してねという前提だからそれでOKという強引なこともも言えないわけではない。無理があるけど。
あと、そんな説明するから専門外の人の感覚とずれてわかってもらえなくなるんです。AIやっている奴らがまた訳のわからんことを言っているという事になる。

でもまぁ、質問する方も悪いんですよ。

大仏って犬なの?猫なの?

大概この質問自体が悪意そのものですもんね。正直、どっちもどっちです。

根本の問題:なんで、知らないって言えないの?

だって、知らないって言うことってとても難しいんですよ。一番簡単な方法は、教えたデータに含まれなかったら全部知らない。でも、これじゃ使い物になんないですよね。
知らないと言うためには、知っている範囲を明確化する必要がある。その範囲の中は知っている。その範囲の外は知らない。そんなイメージです。

一応、学習したラベルの違うデータ間には識別境界と言われるものが存在しています。概念的なものではありますが、そういうものの存在が仮定できるぐらいにははっきりしているということです。
でも、知っている・知っていないという観点で学習していないと識別境界も引けないんですよね。だから、知っているのと知っていないのの区別は学習していないから出来ないんです。

機械学習は、勉強したところしか推論できないんですよ。そこが限界。しっかり理解しておかないといけません。
人間的な言い方をすると、多くの機械学習モデルは知らないということにすら気づけないんですよ。

なんか、機械学習はすごいってことだけインプットされちゃった人たちが多くって、こういったことがぜんぜん伝わっていないんですよね。これはどうにかせにゃならんです。

知らないって言えないことが引き起こすやっかいな問題

それはもう、知らない領域の問題が来たら適当に答えちゃうと言うことにつきます。機械学習モデルって信用できるの?のところにも書いているんですが、すんごい問題なんです。
ただ、今のところこの問題に対する根本的な対策を打つことはかなり難しい。こんなこと無視して突っ走っちゃいましたからね。
まぁ、既存の技術で考えるんだったら、カーネル密度推定とかは結構良い線なんですけどね。これを使って分類モデルを作ると知らないと言ってくれるんですけどその代償として成績がすごく悪くなるんですよね。なかなか難しいです。

だから、知らない問題を極力与えないようにしないといけない。こういう配慮がどうしても必要になっちゃいます。そうしないと、知らないデータが来たケースで極端にスコアが落ちてしまう。
ぶっちゃけ、この配慮をしていないいケースの方が目立つ感覚ですが…誰もこの辺統計とっていないからなぁ。いるんかなぁ、とっている人。感覚的にはこの点は絶望感しかないです。

今日の結論

「機械学習が学習していない類のデータを与えちゃ駄目だよ」
「これを守らないととっても残念な結果になっちゃうよ」

覚えときましょう。

この記事が気に入ったらサポートをしてみませんか?