初めまして!
プログラマのじゅんぺいです。
二年目にして、ついにブログデビューです!!
去年を振り返ってみると、自分の足りない知識を先輩に教えていただきながら、学生時代に得たスキルを総動員して、とにかく開発に全力投球していく感じでした。
学生時代はチーム制作を行うときでもプログラムはほぼ一人で全部やることが多かったのですが、今は自分よりプログラムができる人ばかりなのでギャップがすごいです。
こんな僕の初めてのブログの内容は、ディープラーニングをやってみたいな~
というテーマで進めようと思います。
なぜディープラーニングかというと、今回の投稿のタイトルを見ていただけるとわかる人にはわかっていただけるはず・・・
そういえばみなさん。
ソードアート・オンラインってご存知ですか?
知らない人のために簡単に解説すると川原礫先生原作のライトノベルです。
もとはWebに公開されていたものですが、同作者のアクセルワールドという作品の小説化に伴いライトノベルとして出版されることになったものです。
今はアニメ2期を経て映画化までされている人気作品になっております。
まだ見たことがないという方は是非見てください!!
ちなみに2月に公開した映画ソードアート・オンライン オーディナル・スケールを僕は4DXを含め4回ほど見に行かせていただきました。
ソードアート・オンライン オーディナル・スケールにはAIでできたキャラクターユナという存在が出てきます。作中ではこのキャラクターの思考がディープラーニングにより動作しているとのことが言われていました。
そう、ディープラーニングを極めると自分の理想のキャラクターを作り、実際に対話することも夢ではない!!(ほんとにできるかは知らないけど)
はい、というわけでディープラーニングについて簡単に調べてみました。
ディープラーニングとは
ディープラーニング、深層学習(英: deep learning)とは、(狭義には4層以上の)多層のニューラルネットワーク(ディープニューラルネットワーク、英: deep neural network)による機械学習手法である[1]。近年、ヒントンらによる多層ニューラルネットワークの学習の研究と、学習に必要な計算機の能力向上、および、Webの発達による訓練データ調達の容易化によって、音声・画像・自然言語を対象とする問題に対し、他の手法を圧倒する高い性能を示すことが分かり[2]、2010年代に普及した[3]。しかしながら、多層ニューラルネットが高い性能を示す要因の理論的な解明は進んでいない
訳が分からないですね。
という訳でもう少し調べてみます。
といってもネットを調べてもよくわからなかったので、オライリーの「ゼロから作るDeepLearning」を購入し、実際に作りながら学習を進めてみました。
学習をしてみた結果、訳が分からなかったニューラルネットワークの仕組みがなんとなく理解できてきました。
ネットで調べると、ニューラルネットワークとはニューロン間の情報伝達を行うことで予測ができる的なことが書いてあるところがありました。
このニューロンって具体的になんやねんっといったところと、情報伝達ってどんなことするん、といったところがわからなかったのでそのあたりのとても簡易な解説を書いておこうと思います。
■ニューロンとは
もともとは神経細胞のこと。
情報処理と伝達に特化した細胞だそうです。
ニューラルネットワークでは、シグモイド関数を用いて入力されたデータに合わせて細胞の活性度を算出し、これを信号として次のニューロンに伝えていくことで実際の神経細胞の動きを再現するようなアプローチが取られているようです。
■情報伝達とは
ニューラルネットワークには入力層、中間層、出力層があります。
この各層に流れていくデータの動きはネットを調べてもたくさん出てきますので調べてみてください。
この情報伝達の時に、ニューロンは次層のニューロンすべてに対して自分の活性度を送ります。この次層に信号を送るときに重みを掛けます。さらにバイアス用のニューロンを追加し計算することになります。
これらの重み等の値が学習によりきめられるものになります。
さて、これらの要素で成り立っているニューラルネットワークですが、結局何がすごいのかというと、人の手によるルール作りを必要とせず機械にデータを学ばせるという方法が取られているということです。
たとえば手書きの5という文字を認識するプログラムを作る場合、それに特化したアルゴリズムを考えたとしてもそれは5という数字を認識することしかできません。
他の数字を認識するためには別のアルゴリズムが必要になったりします。
ですが、ニューラルネットワークは、学習することにより、同じプログラムで5という数字でも8という数字でもある程度正しく認識できるようになります。
ですので、学習データを用意するワークフローを確立することができれば同じようなプログラムで応用できる処理は多いのではないでしょうか。
次回は実際にディープラーニングを使った実用ネタを作れたらなとか思っています。