垂流

報酬月額7桁超えの「それなりアフィリエイター」が語る日常

ディープラーニングへの苦言

ディープラーニングが、もてはやされているようですな。

でもね。

問題もあるよね。

昔に学んだ、ちょっと怪しい知識を元に、書いてみたいと思います。

ディープラーニングってのは、ニューラルネットワークです。

で、ニューラルネットワークってぇのは、ヒューリスティックです。

ヒューリスティックというのは、「必ず正しい答えを導けるわけではないが、ある程度のレベルで正解に近い解を得ることができる方法」(Wikipediaより)です。

別の言い方をすると、答えの正しさを保証できない訳です。

そういう意味では、多少、語弊がある表現になりますが、「どうでもイイこと」にしか使えません。

例えば、「猫の画像の認識をする」というのは、うまく行くと「スゴイ!」てなことになります。

けれども、うまく行かなくても、どうと言うことはありません。

例えば、人が死んだりなどはしません。

だから、任せられる訳です。

そんな具合なので、例えば、「車の運転を任せる」というようなことには使えません。

つまり、「どうでもイイこと」じゃないこと、という訳です。

そういう「大事なこと」に使うのは、たぶん、無理です。

たとえ使うとしても、補助的なものにしかならないでしょう。

理由を説明するために、「ニューラルネットワークって?」という、元々の話を少ししたいと思います。

ニューラルネットワークというのは、脳の神経細胞をモデル化したものを繋ぎ合わせて作ります。

「モデル化って何だ?」と言えば、要するに、単純化です。

脳の神経細胞(ニューロン)は、他の細胞と繋がっており、そこから電気信号を受け取ります。

そして、その信号が、ある程度以上になると、自らも信号を出し、別の神経細胞に伝えるという動きをします。

これを「発火」と呼びます。

しかし、実際のニューロンが持つ特性は、こればかりではありません。

一度、信号を出したら、その後しばらくは出さない「不応期」と呼ばれるものがあったりなどして、その動きは結構複雑です。

しかし、複雑な動きをコンピュータ上で真似(シミュレート)するとなると、非常に計算の手間が掛かることになります。

そのため、「だいたいこんな動きだろ?」ということで単純化し、それらを組み合わせて、ネットワークを作ることにしています。

そして、これにチューニングを加えることによって、学習をさせることとしている訳です。

実際に、どの部分をチューニングするかと言えば、「ニューロンが出力した信号を、どうやって伝えるか」の部分になります。

実際のニューロンには、興奮性のものと抑制性のものの2種類があります。

信号を受け取ったニューロンを発火させる方向に信号を渡すか、逆に発火を抑えるように伝えるかということです。

発火したニューロンの信号を「1」としたとき、これを、次のニューロンに伝える場合に、「−1」としたり、「0.5」としたりということで、元のニューロンと次のニューロンとの繋がりの重み付けを変えます。

ここが、学習によって調整される部分です。

これによって、信号がどう伝わるかが変わり、例えば、抑制性のニューロンばかりが繋がっているニューロン、つまりは、マイナスの重み付けが多く集まっているニューロンは発火しづらくなります。

学習を行う際には、例えば、「こういう入力が入ったら、出力はこう」という正解のセットを用意して行います。

「どういうパターンに、どう答えれば良いか」というのが、望む状態になるように、ニューロン同士の繋がりの重み付けを調整していく訳です。

けれども、通常は、「すべてのパターン」を学習の例として用意はできません。

猫の画像を認識する場合を考えてみてください。

そもそも、「猫と見なせる画像のすべて」というセットなど、ありません。

逆に言えば、だからこそ、学習する意味がある訳です。

つまり、学習させていないデータについても、上手に答えるところに醍醐味があるということになります。

ですから、十分なのかどうかは分からない、ある程度の数のデータを用意して、それについて学習させる、ということになります。

そもそも正解のデータの全セットがあるのなら、それを使って答えれば良い訳で、学習させる意味がないことにもなってしまいます。

また、ここが重要なところですが、チューニングをある程度やったとしても、「なぜ、学習できていると言えるのか」は説明できません。

「それぞれのニューロンの繋がり部分が持つ重みの全体が、なんとなーく、正しくチューニングされている筈でぇす(はぁと)」という答え方しか、できない訳です。

また、同様の理由から、どこまで学習をすれば良いかということには、答えがないものと思われます。

ですから、「もう完璧です!パッチリ学習できちゃいました!!!」というようなことは言えない訳です。

「どのデータを使えば良いのか」と「どれだけ学習させれば良いのか」が不明な訳です。

知らんけど。

たぶん、そう。

な筈。

となると、これは、かなりの欠陥です。

なんという、頼りなさでしょうか!(自信はないけど決めつける)

そんな訳で・・・。

夢の様なことを語って、どこぞからカネを引っ張ろうと思っているのかもしれませんが、個人的には、ディープラーニングが素晴らしい技術などとは、現時点では、あまり思えません。

ただし、「近い未来に、もっと大きな展開があるかもしれない」とは、思います。

それは、上記のようなモデル化されたニューロンを物理的に作り、それらを無数に繋ぎ合わせて動かすようなことをした場合に、また別の地平が開けるだろうという話です。

これは、すでにやっている方もいるのだろうとは思いますが、大規模なもので実施し、目覚ましい結果が出たという話は、寡聞にして聞きません。

現状では、ニューラルネットワーク実験の多くが、コンピュータ上で、仮想的にニューロンを動作させるシミュレーションだろうと思います。

それでは、処理は並列化されず、自ずと限界があります。

物理的な素子としてニューロンをモデル化し、圧倒的な数を組み合わせ、十分な学習をさせたとき、そのモノは自意識を持ち始め、「オレって、素子が劣化したら死ぬのかな?」というモータルコンバットメメント・モリな言葉を発するかも知れません。(飛躍しすぎ)

⇒ 当ブログ管理人kihiro:作品一覧、著者略歴