機械学習の中にもロジスティック回帰、決定木、ナイーブベイズ、ニューラルネットワークと様々な学習プロセスが存在しますが、深層学習(別名ディープラーニング)は機械学習の手法の一つです。
2006年にディープラーニングが発表され、現在に至るまでの第三次AIブームの引き金となりました。本記事では「ディープラーニング」に焦点をあて、ディープラーニングの概要や簡単な仕組み、様々な種類のディープラーニングなど「エンジニアが知っておくべき深層学習の基本」をまとめました。
本記事はこれから機械学習を習得しようと考えているエンジニアの方へ向けた記事です。機械学習の基本的な理解があると読み進めやすいかと思いますので、機械学習をご存知ない方は下記の記事をお勧めします。
参照:いまさら聞けない!機械学習とは?人工知能と機械学習の関係や実例を交えて説明します
この記事の目次
ディープラーニングとは?
ディープラーニングまたは深層学習とは、コンピューターが人間の脳神経回路を模して物事やデータをより正確かつ効率的な判断を実現させる技術を指します。
人間の脳神経回路は非常に複雑ですが、その一部の構造を真似て計算処理を行うことでコンピューターが従来の手法による結果を劇的に改善する事が可能になりました。
機械学習の世界的権威で元グーグル・ブレインやバイドゥで人工知能研究を行なっていたAndrew Ng(アンドリュー・エン氏)が、2013年の講演会でディープラーニングについてこのように発言しました。
(ディープラーニングとは)脳のシュミレーションを使うことにより-
- 学習アルゴリズムをより良く使いやすくしたい
- 機械学習と人工知能の分野において革命的な進化を起こしたい
私は(ディープラーニング)が人工知能を進化させる最良の手段と信じています
参照:Andrew Ng: Deep Learning, Self-Taught Learning and Unsupervised Feature Learnin
人工知能はいまだに課題の多い研究分野ではありますが、ディープラーニングの登場により未だかつてないスピードで進化を遂げている分野(自動運転技術など)もあります。「人間の脳神経回路を模している」と前述しましたが、ではより具体的にどのように模しているのか?を説明していきます。
*注釈*
深層学習・ニューラルネットワークの発展に伴い実際の脳神経回路の仕組みと大きな乖離があることから、説明として「脳神経回路を模している」とする表現方法が適していないという論調もあります。本記事では従来の説明方法で進めますが、そのような論議があることもご理解ください。
人間の脳神経回路の仕組み
冒頭でも触れましたがディープラーニングは人間の脳神経回路を模した手法です。脳神経を知る上で重要なのが「ニューロン」です。ニューロンとは下の図のような形をしています。(図全体が1つのニューロンを表しています)
脳内にはこのニューロンが千数百億個存在しており、ニューロン同士が巨大なネットワークを構築しています。ニューロンには「情報処理」と「情報伝達」の役割があリます。
「樹状突起」と呼ばれる部位はアンテナのように他の細胞から入力信号を受けます。信号を受信したニューロンは「細胞体」により何らかの計算を行い情報処理をします。処理を行なった信号を次は「軸索」を通じて次のニューロンへ渡します。
このように人間の脳は数多くのニューロンが信号を受け取り処理をして次へ渡す流れを繰り返しながら情報を伝達するのです。
1950年代にこの脳神経(ニューロン)の仕組みをコンピューターにより人工的に処理を行う手法が発表されました。ディープラーニングの原型とも言われる「パーセプトロン」です。ではパーセプトロンについて詳しく見ていきましょう。
パーセプトロンとは?
パーセプトロンとは人工ニューロンとも呼ばれており、複数の入力値に対して処理を行い1つの出力を行います。下の図はパーセプトロンを表したものです。先ほど説明したニューロンに少し似ていませんか?パーセプトロンもニューロンと同様に「入力値」を「処理」して「出力」を行います。
実際にニューロンでは「電気信号」を入力信号として受け取りますが、パーセプトロンの「入力」は数値を受け取ります。この入力された数値に対して「処理」を行いますが、その処理を理解する上で重要なのが「重み(Weight)」と呼ばれる概念です。
各入力値には「重み」という数字が割り当てられています。実際の脳ではニューロン同士の繋がりの太さは一定ではなく、太いつながりほど伝達の優先度が高くなっています。繋がりの強弱のおかげで脳は効率の良い計算を行えているのですが、パーセプトロンでは、この概念が重みで反映されています。入力層から入ってきた情報をそれぞれの重みでかけることによって、入力値に優先順位をつけているのです。
次に「活性化関数」の出番です。活性化関数は英語で「Activation Function(アクティベート・ファンクション)」と呼ばれます。名前に活性化とあるように、出力する値をどれだけ「活性」するかどうかを判断する処理を行います。
パーセプトロンが登場した1950年代は「ステップ関数」と呼ばれる非常に単純な処理が加えられていました。現在の機械学習の世界でも活性化関数は多くの手法で活用されています。(ロジスティック回帰のシグモイド関数も活性化関数です)
パーセプトロンの流れをまとめると、入力値に対してそれぞれ「重み」を掛け算して加えて、その合計を「活性化関数」で処理を加えて「出力」するものです。上図はステップ関数の事例となっており出力は0か1のみとなっています。
脳神経回路の仕組みでも触れましたが、実際の人間の脳内にはニューロンが数千億個あり、それぞれが繋がり複雑な処理を行なっていましたよね?
上図でも分かる通りパーセプトロンは非常にシンプルな構造の人工ニューロンでした。このシンプルなパーセプトロンをより人間の脳構造に近づけたモデルが「ニューラルネットワーク」です。
ニューラルネットワークとは?
ニューラルネットワークもパーセプトロンと同様に人工的に脳内神経のニューロンを模した処理を加える仕組みです。大雑把に表すと単純な構造だった人工ニューロン(パーセプトロン)を実際の脳内のようにそれぞれを繋げてネットワーク化して処理を行うのがニューラルネットワークです。
下の図をみてください。こちらはニューラルネットワークを表した図形ですが、ご覧の通り「入力層」「中間層」「出力層」とあります。パーセプトロンは入力された値を処理して出力でしたが、ニューラルネットワークでは「中間層」とあるように処理がより複雑化しているのが解ります。
パーセプトロンでは「重み」と「活性化関数」を使って入力値を処理して出力していました。ニューラルネットワークではこの処理もより高度になります。
例えば「誤差逆伝播法(ごさぎゃくでんぱほう)」という処理方法があり、これはパーセプトロンは入力から出力まで一方向での処理を行いましたが、出力の値を何度もネットワーク内で調整していくような処理をさします。
またパーセプトロンで紹介をした活性化関数の「ステップ関数」は非常に単純な処理でした。ネットワーク自体がより複雑化するに伴い活性化関数も「ReLU(ランプ関数)」や「maxout」など目的に応じて処理の方法も改善されていきます。
人間の脳神経ニューロンは電気信号を入力し処理を加えて次のニューロンへ出力します。この構造を模したのがパーセプトロンであり、さらに脳神経のネットワークにより近く模したものがニューラルネットワークです。
ここで本稿の主役である「ディープラーニング」へ話を戻します。
パーセプトロンは単純に「入力」「出力」でした。ニューラルネットワークはより脳神経に近づけるため「入力」「中間」「出力」と少し複雑になります。さらにこの「中間」をさらに深くしたネットワークを「ディープラーニング」と呼びます。
ニューラルネットワークとディープラーニングの関係
ニューラルネットワークの拡大版がディープラーニングというのが解りましたが、まずはその構造の違いを理解しましょう。まずはニューロン(脳神経)をシンプルに人工化したパーセプトロンは下のような構造でした。
さらにより人間の脳神経ネットーワークに近づいたのが下の図のようなニューラルネットワークです。ニューラルネットワークでは「誤差逆伝播法」や「ReLU関数」などより適切な処理を行えるようにも進化をしました。
そして2010年代に入りコンピューターの処理能力の劇的な進化に伴い活躍し始めたのが「ディープラーニング」です。ディープラーニングは下記のような構造をしています。(一例)
ニューラルネットワークと比べてディープラーニングは中間層が多いことが分かります。深層学習の「深層」はこのことを指しているんです。
ここで理解すべき重要なポイントとしては、「ディープラーニングはニューラルネットワークの一部であり、中間層(または隠れ層)を2つ以上持つニューラルネットワークを特別にディープラーニングと呼ぶ」ことです。
では、中間層(隠れ層)が増えて具体的に何ができるようになったかというと、一つの事例としてより複雑なデータを学習する事が容易になりました。
事例として工場の異常検知を考えてみましょう。まずはニューラルネットワークを使って検知モデルを構築したところ、10個のセンサーの値から異常を検知して80%の正解率が出たとしましょう。
検知の精度をより高めたいので新たに1万個のセンサーを追加しました。従来のニューラルネットワークでも1万個のセンサーから予測をすることは可能ですが、中間層が1つしか無いので1万個のセンサーの全ての値の影響を受けてしまいます。
そこでディープラーニングの中間層の出番です。中間層では1万個のセンサーから異常検知に特に役立つセンサーを分析して、検知の役に立つ値は積極的に採用、逆にノイズとなる値の影響力は低めにするといった処理を行います。
それらを用いて異常検知を行うことで精度の改善を図る事が可能になるわけです。
様々な種類のニューラルネットワーク
まずは下の図をご覧ください。これらは全て「ニューラルネットワーク」または「ディープラーニング」です。ディープラーニングはデータの学習過程の手法を示す言葉となり、機械学習の目的に応じてネットワークの構造が多数あります。
様々な構造のニューラルネットワーク(ディープラーニング)が登場したことにより、幅広い分野に応用できるようになりました。CNNやRNN、LSTMなどが代表的なネットワークとして挙げられます。
下の図はAsimov InstituteのFjodor van Veen氏が作成したニューラルネットワークの種類をまとめたものです。様々な種類の構造があるのが判るかと思います。
本記事で全種類をカバーすることは出来ませんが、特に現在人気の高い(使われる事が多い)ニューラルネットワークを次のセクションからご紹介させて頂きます。
CNN(畳み込みニューラルネットワーク)
現在、画像認識や動体検知に使われるニューラルネットワークのほとんどが畳み込みニューラルネットワーク(Convolutional Neural Network 略してCNN)と呼ばれるものです。 一般的なニューラルネットワークと違い、CNNは畳み込み層とプーリング層でできています。
ここでいう畳み込みとは、簡単に言うと画像の特徴を際立たせることです。画像全体から様々な特徴を取り出していき、画像全体をそのまま分析するのではなく、画像より小さなフィルターを画像全体にスライドさせながら、部分部分で分析していきます。フィルターを複数枚使って様々な特徴を抽出していきます。
畳み込み層で抽出した特徴をもとに特徴マップを作成します。プーリング層では、特徴マップの要約を行います。特徴マップを小さなウィンドウに区切り、区切ったウィンドウ内の最大値をとっていきます。
このプーリングを行うことによって、特徴の厳密な位置の変化を気にすることなく画像内での特徴を検出することが可能になります。これは、移動普遍性と呼ばれ、画像認識にCNNが向いている大きな理由の一つです。実際のCNNは畳み込み層とプーリング層が何層にも重なってできています。
RNN(再帰型ニューラルネットワーク)
再帰型ニューラルネットワーク(Recurrent Neural Network)は主に自然言語処理の分野で使われています。
従来のニューラルネットワークでは入力値は互いに独立したものという仮定が立てられていました。この仮定は画像処理などでは問題ありませんが、言語のように入力値に連続性がある場合は適切ではありません。
例えば、「明日の天気は」という文の次の単語を予測する場合、従来のニューラルネットワークだと「明日」「の」「天気」「は」はそれぞれ独立した単語として扱われていたので、次の単語の予測には最後の単語の「は」しか使われませんでした。しかし実際には「は」という単語だけでなく、その前の「明日」「の」「天気」も考慮する必要があります。
RNNでは中間層にループを組み込むことによって前の入力を記憶できるようにしました。前後の文脈の中から単語の意味を理解できるようになったということです。そのおかげで、自然言語処理などの時系列データにも対応できるようになりました。主に、機械翻訳、文章生成、音声認識などに使われています。
LSTM(Long Short Term Memory)
RNNには、その複雑な構造が故に1つ問題がありました。少し前に説明した誤差逆伝播法を思い出してください。出力の誤差をもとに重みを変えるのが誤差逆伝播法ですが、RNN内のループのせいで活性化関数を何回も通ることになります。そうすると誤差の指数が小さくなりすぎて役に立たなくなってしまいます。
この問題を解決するために考案されたのがLong Short-Term Memory法(LSTM法)です。RNNでは入力データは全て記憶されていましたが、LSTMには情報を忘れる機能が追加されました。これによって「この情報は必要」と「この情報は必要じゃない」という判断ができるようになりました。
通常のRNNが苦手としていた、予測情報と関係情報の距離が長いケースでも、LSTMで対処できるようになりました。これにより、機械翻訳の精度も飛躍的に向上しました。
深層学習が使われている事例紹介
ディープラーニングのおおよその概要がお判り頂けたかと思います。最近では毎日のように「人工知能搭載」や「人工知能を活用した」などのニュースを目にする事がありますが、これらの多くの製品やサービスの根幹としてディープラーニングが活用されています。次は深層学習の最新の研究など一部事例を紹介します。
白黒写真の自動色付け
早稲田大学の石川研究室では深層学習を用いて白黒の画像に自動で色付けを行う技術を研究しています。今までは人が手作業で白黒写真をカラーに変換していましたが、様々なカラー写真を機械に学習させることで機械でもこの作業を行えるようになりました。白黒写真のシーン全体が何なのかを認識し、他のカラー写真を参考にしながら色付けを行っています。興味がある方はこちらのリンクから詳細の確認が可能です。
画風の変換
アーティストでありプログラマーでもあるGene Kogan氏はCNN(畳み込みニューラルネットワーク)を応用して画像の画風を変換しました。手法の詳しい説明やコードはこちらのリンク(英語)で公開されています。大まかな流れとしてスタイル画像(画風として用いる画像)から画風を抽出し、コンテンツ画像(画風を変換したい画像)から、その画像らしさを表す特徴を抽出します。最後に、スタイル画像とコンテンツ画像から抽出した特徴から、新しい画像を生成します。この手法を使って、モナ・リザを画風変換したものが下記のイメージです。
より高精度なGoogle翻訳
Google翻訳は深層学習が導入されたことにより精度が大きく飛躍しました。今までの翻訳機は、文章を単語ごとに分割して組み合わせていたので不自然な文章になりがちでした。深層学習を使った翻訳では文章単位で翻訳を行うので、文脈的に自然な翻訳結果が表示されるようになりました。さらに、カメラをかざすだけで、リアルタイムで文字を抽出して翻訳結果に置き換えてくれる機能も追加されました。この機能にも、画像認識やリアルタイム翻訳に深層学習が使われています。
読唇術で会話を文章化
オックスフォード大学は、人の唇の動きから会話を文章化するソフトウェア「LipNet」を発表しました。同じ映像をLipNetと読唇術のプロに見せて検証を行った結果、人間の専門家の正答率が52%だったのに対し、LipNetはなんと正答率93%を叩き出し、人間に圧勝してしまいました。この技術がさらに発展すれば、補聴器や手話にとって代わるコミュニケーションの手段になり得るかもしれません。機械学習ライブラリ「Keras」で実装したコードがGithubで公開されています。
エンジニアはなぜ深層学習を学ぶ必要があるのか?
深層学習は、その精度や応用性の高さから様々な分野で注目されています。これは、IT企業を中心に深層学習に対する取り組みが盛んに行われている事実からも明白です。また、深層学習の技術は私たちの日常生活の在り方さえも変え始めています。
今では機械学習の主流ともなった深層学習ですが、まだ新しい分野ということもあり、扱える人材が少ないというのが現状です。そのため、多くのIT企業を中心に深層学習に長けたエンジニアのニーズは非常に高いです。いまから勉強を始めることによって他のエンジニアと差をつけて、キャリアアップを目指すことができます。
ディープラーニングの勉強方法
本記事の最後にディープラーニングの勉強方法について簡単に説明します。ディープラーニングですが本記事でも説明をした通り機械学習の手法の一つな訳ですが、他の手法と比べて理解・習得のハードルは高いです。
ですのでディープラーニングを習得するのであれば、まずは機械学習の基本的な手法から勉強をされることを強くお勧めします!機械学習の初歩的手法のチュートリアルを配信していますので、まずはこちらから始めてみては如何でしょうか?
機械学習 チュートリアル 線形回帰
機械学習 チュートリアル ロジスティック回帰
深い理解よりもまずは手を動かして深層学習に触れてみたいという方もいらっしゃるかと思います!機械学習ライブラリを利用することで、ライブラリの初歩的な使い方さえ覚えてしまえば、理論の理解なしに深層学習を実装することができます。下記はディープラーニングで人気の高いPythonライブラリです。
TensorFlow
Googleが提供している世界的に人気のライブラリです。ウェブ上の情報や書籍が豊富です。細かな調整が可能で汎用的と言えます。ただ、ある程度の数式やアルゴリズムの理解が必要なので、初心者には扱いにくいかもしれません。
Keras
KerasはTensorFlowのラッパーライブラリ(機能を変えずに使いやすくする役割を担うライブラリ)です。Kerasを使うと、最低限の深層学習とプログラミングの知識で実装が可能です。必要な層の数などの必要最低限のことさえわかれば、あとは層を積み重ねていくだけでネットワークが完成します。TensorFlowだと数十行になるコードもKerasだと数行で書けてしまいます。利用者も多くてコミュニティが広いのも魅力の一つです。
Kerasを使ったチュートリアル初心者のための畳み込みニューラルネットワーク
LSTMモデルを構築してビットコインとイーサリアムの翌日の価格を予測する方法
まとめ
今回は深層学習について解説しました。いかがでしたでしょうか?深層学習の世界は奥が深く、本記事で紹介した内容は氷山の一角にすぎません。もっと深く掘り下げて勉強したい方は、書籍やインターネットでいろいろな文献が発表されているので、調べてみると面白いと思います!
またこれから機械学習を始めようと考えている方は下記の無料コースもお勧めです。ぜひ、受講をお待ちしております。
機械学習 準備編 無料講座以上となります!