【#AI活用】DeepLearningの「ディープ」で「ラーニング」とは?【素養】
ディープラーニングという言葉を聞いたことがあるでしょうか。
AIをこれから学ぶにおいて"数年前"は主役だった言葉になります。
こんにちは、CDLE福岡のドイです。
AI活用人材マガジン10本目になります。
先に本稿の結論を言うと「ディープラーニング」とは、
です。
今回はこれを持って帰っていただきます。
本日のテーマについて
昨今では、AIの活用が当たり前になり
AIといえばchatGPTに代表されるような
生成AI(Generative AI:ジェネレーティブAI)を指す言葉になってしまいました。
生成AIは、
chatGPTのようにテキストを生成するものや
画像や音楽に至るまで、これまで人が創作してきたさまざまなDATAを作り出すことができます。
AIという分野が技術的にそこに至るまでの過程では、
分類する
予測する
といった、人が「判断する」「予想する」を再現したAIが主流でした。
すごく簡単にいえば、
「犬」と「猫」の画像を見せて(入力)して、どちらか答える(出力する)
といった具合です。
そのようなAIを"画像認識"の分類モデルと言います。
なんでこんな人が見ればわかることを機械にやらせるのかというと、
画像認識や画像分類に限って言えば、「良品判定」などを想像してもらえるといいと思います。
製造業での不具合を見つける作業
農業での収穫や仕分けなどの判断
など、大量にやらなければならない作業を人ではなく機械にお願いすることができるようになります。
これって人口がどんどん減っている日本ではめちゃくちゃ大事なことなんです。
これらのAIを効果的に機能させるには、
「機械学習(ML)」と
「ディープラーニング(DL)」
という2つの基礎的な技術が必要でした。
前置きが少し長くなりましたが、
今回はこの「ディープラーニング」という技術について概念的なところを
僕の言葉で解説してみたいと思います。
生成AIが主流(と思われる)ようになってディープラーニングという技術を細かく勉強する必要が無いかのように言われ出しました。
確かに活用するだけであれば、直接的には要らないかもしれません。
パソコンを使うのに、コンピューター工学は要りませんものね。
しかし、ここで触れずにAIに踏み込むよりも、
ディープラーニングってこんなモノだよねとイメージを心の隅に持って入っていただく方が、格段に学習効率が上がると思います。
これからAIを勉強していく方や、
勉強してみたけどいまいちよく分かってなかったという方向けに
なるべく「イメージ」できる話をできるように頑張ります。
本記事の目的は、「ディープラーニング」の
「ディープ」って何?
「ラーニング」って何?
を説明するところまで【僕が言語化を頑張る】ことを目指して書いていきます。
安心してください難しい数式やアルゴリズムはでてきません。
(出せませんし、僕もよくわかっていません( ・`ω・´)キリッ)
本記事ではAIとディープラーニングに関わる用語がいくつか出てきます。
しかし、AIをこれから学ぶ上で最低限のものだけにしますので、
ここから先の太字については大事そうだなと思っていただければ幸いです。
んで、賛否が出そうなのを覚悟してなるべくかんたんに説明します。
AIは関数だ
これから皆さんが学ぶ「AI」の正体は「関数」です。
AIってコンピューター上で動くものです。
なので、コンピュータってば電子機械なので
極端にいえば0か1かローランドかそれ以外か見たいなのON-OFFが積み上がった回路でできています。
そうです。
コンピューターって数字しか理解できないんです(知ってました??)
では、さきほど説明した犬か猫かをどうやってAIは判定しているんだろうって話なのですが、
犬の画像を読み込ませて、犬と判断する
という処理動作は、
犬の画像を(数値に変換して)読み込ませて、(でてきた数値によって)犬と判断する
ということをしています。
イメージ湧いてきましたか?
数字を入力して、数字を返すモノ
これって皆さんが数学でならった「関数」そのものなんです。
ディープラーニングの位置付け
ディープラーニングは、「機械学習」の一種です。
(もう賛否が起きそう)
機械学習という枠組みの中の手法の一つくらいに思っていただければいいです。
今回は「機械学習」については割愛しますが、位置付け的にはこんな図になります。
AIという概念は明確な定義が無いらしいです。
なのでそれを語るとよりイメージしにくくなります。
それらしい一般的な説明はあるのですが、、、
ね?難しくなったでしょ。
それはさておき、
AIとは「コンピューターが何かしてくれる」んだ、
って気づいてくれたらOKです。
それってプログラムと何が違うの?
って話になるのですが、
AIもプログラムっちゃープログラムです。
プログラムって先ほどの「関数」を用いていろんな出力結果を便利に使う機械への命令書ですよね。
数値を代入すると代入した値に*3した数値がでてくる関数
とかね。
中身は単純に受け取った値に対して3をかけてreturnするだけなんですが。
AIって、もうちょっと複雑なことができる関数だと思ってください。
それも人が決めたことではなく、AIが「事象」に合わせてお勉強して自分で決めたルールに基づいたものになっています。
この辺は後述します。
関数って言葉をここでは頭の隅に置いておいてください。
そして、関数とはプログラムの中においても「数式」だとイメージしておいてください。
数字を入れて、別の数字が出てきます。(大事な部分なので2度目)
で、コンピューターに何かしてもらうために
「機械学習」という技術を用いて
コンピューターに「学習」をさせます。
さらにその学習技術の中に「ニューラルネットワーク」という技術があり、
その応用として「ディープラーニング」があります。
はぁ、ディープラーニングまで遠かったですね。
ではここからはディープラーニングを説明するために
その基礎技術であるニューラルネットワークに(少しだけ)触れていきます。
ニューラルネットワークのおおざっぱな概要
とうとうむずかしい言葉がでてきました。
しかし難しく考えずに、そのまま脳に受け取ってください。
画像を判定するAIをモチーフに説明していきます。
超おおざっぱにいきますよ。
ニューラルネットワークはおおよそこんな形をしています。
①「入力層」という入口
②「中間層(隠れ層)」という通路(迷路?)
③「出力層」というゴール
この3つを覚えといてください。
少しだけニューラルネットワークの技術概要に触れると、
です。
僕らの脳内にこんなのがあるんですね。すごい!
勘がいい人は気づいきましたよね。
信号を受け取って、信号を返す!!つまりは「関数だ!」ですね。(3回目)
コンピューターは数字しかわからないって前述しました。
つまり、コンピュータは(そのままでは)画像を認識できないんです。(トンデモ発言)
なので、まず画像を『数値』に変換します。
これを"数値化"といいます。
数値化するにもいろんな手法があるのですが、ここでは割愛します。
みなさんご存知RGB
イラストやWebデザインをかじった方ならRGB(光の三原色)を聞いたことがあると思います。
1枚の画像があるとして、その1pxごとのRGBの数値(赤 、緑 、青 の三つの原色値)を出してあげることで、画像を数字に置き換えることが可能となります。
1pxごとにRGBの3つ数字がでてくるので、
1枚の画像からとんでもない数の数値データがでてくる
ってイメージが湧けばここでは合格です。
(100px*100pxの画像だと、RGB:0〜255の100*100*3(原色)=30,000個の組み合わせ!!!)
ニューラルネットワークに話を戻すと、以下のような感じで処理が進みます。
まず数値化した値を「①入力層」に入れます。
次に、「重み」をかけて次の層に送ります。
さらに次の層に送るのに次の「重み」をかけます。
ここまでを②中間層(隠れ層)と言いましたね。
最終的に辿り着くところである出力層を通って、
でてくる結果はなんと『確率』です。
一気にいろんな言葉がでてきましたね。
「重み」と「確率」という言葉がでてきました。
重みは、先ほどの関数で説明した[かける3]するみたいなもので、
入力された数値を変化させる値のことです。
説明の言葉どおり、重みの値を掛け算します。
最終的に出てくる数値が「確率」でした。
これは何の確率かというと、
犬猫の話でいえば、
入力された画像の動物は90%犬だと思う、10%は猫だと思う
みたいに、可能性を数値として表現した出力結果だと思えばいいです。
AIは言い切らないのです。(煮えきれねぇやつだぜ)
なので、犬と判断する場合は
人が、そこにルールを設けます。
このAIモデルが80%以上の確率で犬っていうなら「犬ってことにしようぜ」
と。
それを「判断基準」っていいます。
みなさんの普段のお仕事でも出てくる言葉だと思います。
どうですか?ついてきていますか?
まとめます
ニューラルネットワークは、
画像を数値にして入れてあげたら
「重み」で数値を変化させていって、
最終的には可能性という「確率」の数字がでてくる
ってなります。
んー、やっぱり関数だね!(しつこい)
「ディープ」で「ラーニング」とは?
さぁ、ようやく本題です。
今回のテーマである「ディープラーニング」のディープでラーニングするとは何なのかに入っていきます。
犬・猫くらいの分類なら僕らでも何となくわかるかもしれませんが、
たとえば、知人が飼ってる犬がどの犬種なのかと言われたらどうですか?
ちょっとハードル上がりませんか?
犬種ってたくさんありますもんね。
画像分類や画像認識の世界では分類したい対象が複数であることが多いです。
簡単にするためにワンピースで例えていくと、
女の子の写真を入力して、
上記12キャラクターで分類するとしたら、
直感的には「ナミ」かなってわかりますよね。
で、2番手くらいに同じ女性キャラのニコ・ロビンがかろうじて可能性があるくらい。
他のキャラクターはゼロじゃないにしてもゼロに近い確率しか出ないと思います。
それをAIが先ほどのニューラルネットワークを用いてやると考えたら
結構複雑なことをしてそうだと思いませんか?
ニューラルネットワークの画像を思い出してください
入力層に入ってきた数値に何かしらの数値(重み)をかけて
確率として出力するのがニューラルネットワークでした。
しかし、ちょっと掛け算・足し算したくらいで当てれると思いますか?
ワンピースファンをなめるなよ!って思いました。(自分で書いたくせに)
ニューラルネットワークで中間層(隠れ層)というところで
数値を変化させて出力層へ送るという処理をするのでしたね。
ここの層が多いことを「層が深い」という言い方をするのです。(業が深いにちかいです(嘘です))
つまり、中間層が多ければ多いほどディープということ。
ディープラーニングのディープとは、中間層の多さを"深い"と表現しているものだと今日のところは覚えておいてください。
で、やっぱりその通りでちょろっと計算させたくらいでは関数としてまともな結果を出してくれないのです。
それを「未学習状態」と言います。
学習が足りずにまだまだ改善の余地があるという意味です。
良い関数ってなんでしょう。
良い関数は今回のケースで言えば、
入力した画像をワンピのキャラにちゃんと分類してくれるモデルのことです。
この「ちゃんと」を定量的に評価する指標を「精度」と言います。
良い関数とは、良い精度が出せる関数ということになります。
さてさて、話が長くなってきましたがもう少し続きます。
数学でもプログラムでも関数によっては、答えが変わってきますよね。
さきほどの3かける関数なら3倍した数字が出てくる。
10かけるものもあれば、難しく言えば微分するものもあったり、
積分するもの、複数の数値をまぜまぜするものと千差万別なわけです。
出てくる数値によって精度が変わるわけですから、
この関数の中身を調整することで精度を上げていく必要がありそうですよね。
精度を上げる処理は答え合わせによって行います。
ニューラルネットワークの章でお話したなかで「重み」というものがありました。
入力された数値を変化させるやつです。
すごく雑な説明ですが、正解が出るようにこの重みを更新します。
仮に、かける3という重みの設定だったときに不正解だったとして、
正解を出せる重みが4の方が良さそうなら近い方へその値を更新してあげます。
そしてもう一回AIに判定させてみて、正解に"近づいたのか"を評価します。
この"近づいたかどうか"を評価するのに、正解からどれくらい離れているかといういみで「誤差」という言い方をします。
AIが反省した結果を元に、この誤差を計算する関数を「誤差関数」と言います。この誤差がほぼゼロになれば100点に近いAIができたみたいなことになります。
実際はそんなに単純なものでは無いのですが、今回は超概要なのでそれでいいのです。
ちなみに、絶対出てくる言葉なので紹介しておきますが、
値を入力して出力するまでの流れを「順伝播(じゅんでんぱ)」
答え合わせをして誤差が小さくなるように重みを更新する逆の方向への流れを「逆伝播(ぎゃくでんぱ)」といいます。
ここは言葉だけ目に入れてください。
そして、どんな画像を入力してもちょうどいい感じにワンピキャラに分類してくれるような重みを見つけて設定すると「良い関数」になります。
これが「学習」です。(ようやくラーニングの部分)
学習によってどんどん正解に近づけていく作業(誤差を小さくする作業)を行うので、ディープラーニングを「関数近似器」と言ったりもします。
ディープラーニング = 関数近似器を作る理論(技術)
良い関数を見つけたら使うほかありません。
AIを使うとは今回で言えば「推論」(キャラ当て)することになります。
使ってナンボです。
ようやく5,000字と数枚のスライドをつかって「深い」「学習」まで辿り着きました。
これでも、ほんとにイメージの話しかしていなません。
なんとなく「ふーん、そんなものか」と思ってもらえたらそれでいいと思っています。
最後に少しだけ余談を、
本稿で例に出した「かける3の関数」は数式にすると
y = 3x
という一次関数(一次元)です。
xの部分が入力される数値になる部分で、パラメータと言いますね。
画像でいうと、RGBという3種の数値があったわけですから、
仮にイメージで書くと、
y = 3r + 3g + 3b
三次関数(三次元)になりますね。
全部に3かけちゃってますが、これで分類できるとは思えないっすよね。
かりに、先ほどのナミに近づけたいって場合は、
ナミの特徴を考えると、「髪の色がオレンジだな」とか想像できますよね。
RGBのオレンジが[Red : 255 Green : 165 Blue : 0]くらいなので、
Rは強めで、Gはほどよく、Bは要らないみたいにすれば
オレンジに強い回答がでるんじゃまいかって妄想できたりします。
これをパラメーター調整と言います。
このパラメーター調整を自動でガシガシ計算しながら正解に近づけてくれる作業がAIを学習させるってことなんですよ。
ちなみに、みなさん大好きなchatGPTのVersion 3.5は
3,550億パラメータです。(ちゃんちゃん)
これからAIを学んで活用していく皆さんへ
僕自身もまだまだ学習の途中。
だからこそ、わからないことだらけで何度もつまづいています。
それゆえに、自分なりに理解するためにいろんな言語化を行い
数式は覚えてなくても腹落ちするような勉強をしています。
(理系出身なのに文系みたいな。。。)
いろんな本を読んでもガチ勢のためにすごく難しく書いてあります。
それではみんな挫折しちゃう。
なので今回はその前日譚的な感じで「素養」と表題にさせていただきました。
これであなたもAIにわか勢くらいにはなったはず!!
ここから何かしらのAIに関する学びを実施する際に、この素養があれば
「ふーん」から「へー」になると思います。
この微々たる変化が大事だと僕は思っています。
それでは、
これからAIを活用して活躍したいみなさんにおすすめの本を2冊紹介します。
文系AI人材になるシリーズの2冊です。
どちらを読んでも大丈夫。
大事なのは素養から入って学習し、AIを仕事に活かす活用に至るということ。
【お役に立てましたら、よかったらフォローと、スキ❤️を、そしてX(Twitter)でシェアと感想を頂けると幸いです】
【あとがき】
一気書きだったので、やはりすこし伝わりにくい難しい表現になった部分があるかと思います。
できるだけ難しい部分はぬいて、「そういうことよね」に終始したつもりです。
まだまだ勉強ですね。
お読みいただきありがとうございました。もし参考になったり面白かったと思っていただけましたらサポートよろしくお願いします。次の執筆のモチベになります。