データサイエンティストのたまご育成日記 vol.16 ディープラーニングの基礎 ― 前編 ―


みなさん、こんにちは!デジタルテクノロジー統括部に新卒入社した長谷川智彦です。 データサイエンティスト未経験の新卒社員がデジタルテクノロジー統括部でどんなことをやっているのか、どのように成長していくのかの学びの過程を記録していくこの企画。今回は、ディープラーニングの基礎知識について書いていきます!


さて、気づけばもう3月です。月1本くらいのペースでこの記事も書いてきましたが、そろそろディープラーニングについても触れていきたいなと思うので今回はディープラーニングの入り口となるニューラルネットワークについて書いていきます(最近は業務でもちょいちょいディープラーニングのモデルに手を出し始めているので)。
「いやいやBERTやDQNなどの記事を書けよ」という声もあるかもしれませんが、基本的にこの記事はこれから新卒未経験でデータサイエンティストの仕事を始めたい方や、AIは耳にしたことあるけれど具体的な内容は知らないといった方にも読んでいただきたいのでご了承ください(今後の記事ではBERTなども触っていくかもしれません)。
改めて、今回の記事で目指すところは、以下2点です。
・数式が苦手な人でも最後まで読むとなんとなくわかった気になれる。
・漠然とした「AIってなんだかすごそう」から「AIとはこういうものなんだ」と認識ができる。

読んでくださった上でご自身の業務にどのように活かせそうかを考えていただけると幸いです。

ー目次ー

AIとは?

さて、ニューラルネットワークと書きましたが、まずはAIからざっくりと、何も知らなかった方もなんとなくわかった気分になれるように説明していこうと思います(説明の都合上、専門的な厳密性からするとズレる表現もあるかと思いますがご了承ください)。

この仕事についているからかもしれませんが、今やAIという言葉を目にしないことはない世の中になりましたね。ただ、AIって何なのでしょうか?3年前くらいの僕は「AIって原理は知らないけど、機械に人間と同じことをさせようとしているらしい、すげぇな」くらいの認識くらいで、植物実験に没頭していました。
今からするとそんな自分がこの業界に関わっているとは夢にも思わなかったのですが、ただ、思うのはいまだに多くの方が当時の僕と同じような認識なのではないかなと思います(違ければすいません!)。
AIとはArtificial Intelligence(日本語訳:人工知能)の略称なのですが、この定義を調べてみると意外とまだはっきりとは定まっていないみたいです。ただ、一定『人にしかできなかった知的活動(分類、推論、言語処理など)をどのように計算・処理するかの手順(アルゴリズム)とデータを用意して、機械(コンピュータ)に与えることで人と同様の処理をさせようとする技術』みたいです(僕の認識なので気になった方は調べてみてください)。
このAIの中にも区分があり、以下の図のようになっています。

AIという大きいくくりがあり、その中に機械学習があります。今までの記事で扱ったクラスタリングや決定木などはここに属しており、数学的なモデル・アルゴリズムに則ってデータを分類したり、回帰したりします(分類、回帰に関してはVol.7を参照)。その中でも、深層学習という領域があるのですが、ここはニューラルネットワークという人の神経構造から着想を得たモデルでデータを分類したりすることができます(ここに関しては後程詳しく書きます)。その他、教師あり学習や教師なし学習、強化学習と分けられていますが、今回は説明を割愛させてください。

それでは、AIモデルを組み立てるとはどういうことか具体的なイメージを持ってもらうために簡単に一例をあげてみます。今あなたは車や飛行機など様々なものが写った画像と、そこに写ったものがなんであるのかの答えとなるリストを持っていたとします。ある日、上司から、新しい画像データをもらったときに、そこに写っているものがなんであるのか判定できるAIを作って欲しいと指示されました。
では、この時にAIをどう作っていくのかの概略を説明します。まずは、AIに判定ができるように学習をしてもらいます。これは皆さんが資格試験などを受けるときに参考書を買って勉強するのと同じ感じでAIにもまずは学習をさせます。そのために元々持っていた画像データとその画像に写っているものはなんであるかのリストデータを用意します(以下学習データと書きます)。この学習データをAIに入力して画像と、その画像に写っているものの答えを覚えてもらいます(これを専門用語でも学習といいます)。
すると、この時点でこのAIは画像データに何が写っているのかに関して、与えられた分についてはある程度判断できるので、その後、写真に何が写っているのかの答えがない画像データを入れても、AIが今まで学習したデータの中からその写真に一番近いものを答えとして出してくれます(これを推論といいます)。ここまでがAIを組み立てるざっくりとした概要です。

ここでポイントとなるのが、与えるデータとAIモデルの中身です。
AIのモデルを組み立てるには初めに大量にデータを用意しなければなりません。また、基本的には与えたデータの範囲で推論を行うのでどんなデータを与えるかが大事になってきます。次に、AIのモデルの中身ですが、これも様々なモデルがあったり、モデルの中でも変えるべき条件がいっぱいあったりします。これらも解決したい課題との相性があるので検討をしないといけません。データサイエンティストはここを検討したうえでできるだけ解決したい課題に沿ったモデルを探します(そして、工数が許す限りモデルの精度を検討します)。
なので、ビジネス業務にAIを活かそうとするときは、解決したい課題は具体的に何なのか?それに適したAIモデルは作れそうなのか?AIモデルを学習させるためにどんなデータを揃えるか?そのデータはそもそも揃えられるのか?などを意識して考えます。

長々と書いてしまっていますが、ここまでで押さえておきたいことは以下になります。
・AIの中にも機械学習や深層学習などいろいろあるよ。
・AIには学習させるためのでデータが大量にいるよ。そのデータをモデルに学習させるよ。学習させたAIにデータを与えると学習したものの中から予測してくれるよ
・AIによっても中のモデルやデータによって性質が変わるよ

このポイントが伝わっていると嬉しいです。


ニューラルネットワークとは?

それでは、本題のニューラルネットワーク(以下NN)について書いていきます。先ほど、NNは人の神経構造に着想を得ていると書きました。ですが、人の神経構造ってなんぞや?となると思います。
一応、はせがわは大学では生物分野を専攻していたので、ここも超絶ざっくりとですがわかりやすくなるように書いてみます。

人の体には脳と脊髄を中心とする神経系があります。この神経系があるので脳で考えたことを筋肉に伝え、動くことができます。
この神経系を構成している神経は下の図に示しましたが神経細胞(これを英語でニューロンと言います)でできています。この神経細胞は外部から一定以上の刺激を受けると、中で電流が走ります(正しくは電位の変化が連鎖します)。実はこの一定以上という言葉が大事で、刺激が一定以上を超えないと神経細胞は反応しないんですね。一定以上の刺激によって生じた電流は神経細胞を伝って、隣にいる神経細胞に伝えられます。この時に電流がそのまま伝わるのではなく、電流が伝わった先にシナプスという器官があって、そこから化学物質が放出されます。これを次の神経細胞がキャッチすると、また電流が生じてどんどん刺激が伝わっていく仕組み出す(アドレナリンとかアセチルコリンなどを聞いたことがある方はそれが個々の化学物質の正体です)。
余談ですが、皆さんたまにエナジードリンクを飲んだりしますよね?あれは、この神経伝達に関わる化学物質の材料が一部入っていたり、活性化に関わる物質が入ってたりするので飲むと興奮したりする仕組みです。
さてこの神経細胞の1つを見ると多くの神経細胞とつながっていたりします。そして、神経細胞には、もっと活発に動いてねといった作用を持つ化学物質を出す細胞もいれば、いやいやちょっとクールダウンしようねといった化学物質を出す細胞もいます。それらを受け取った神経細胞ではその刺激を足し算して、この足し算した結果が一定の刺激以上になれば電流が生じ、次の細胞へと刺激が伝わっていきます(この一定以上の値を閾値といいます)。

さて、NNの一部分を下の図のAに示しました。神経細胞にあたるノード(〇)とそれをつなぐエッジ(線)があり、一つのノードは複数のノードとエッジでつながり、情報を受け取ります。その受け取った情報を足し算して、その結果を次に伝えていくのですが、この際に、情報にも重要性が異なるので工夫をします。皆さんも普段生活する中で必要な情報と必要でない情報に分けると思うのですが、NNも似た概念を持ちます。情報に対しての重要度(以下重み)を各情報にかけて、それを足し合わせたものを次に伝えていきます。それを数式にしたのがAの図の横の式です。xが各情報、wが重みで、bは閾値です(興味を持たれた方は詳細を丁寧に書いてくれている書籍、サイトが多くあるので見てみてください)。そして、このノードをいっぱい用意し、最後に分類したい数だけ最後にノードを揃えたのがNNです。ここまでで上の神経細胞の構造と似ていることが伝わると嬉しいです。

さて、ノードが縦に並んでいると思うのですがこれを層といい、NNは入力層、中間層、出力層の3層になっていると思います(図のB)。この中間層を増やしていくと層が深い、つまりディープな層を持つNNを作ることができ、俗にいうディープラーニングになっていくわけです。
最後の出力層における分類の判定などは、活性化関数と呼ばれる図のCの式に、伝わってきた結果を入れると各分類に対してどれくらい当てはまっているかの確率を出してくれます(wの決め方は誤差関数や逆誤差伝播法など書かないといけないことがまだまだあるのですがこれも一旦は割愛させてもらいます)。
ここで、中間層の数や種類、活性化関数などNNを組むとなると色々検討するところがあるのもイメージついてもらえると嬉しいです(なので調整できる時間があるとメンタル的に健康になれます)。実際、業務でNNやLSTMを組んだりしていたのですが、いざ組んでみると検討するところが色々あるんだなといったことや、データの形(次元数)などちゃんと理解しないと組めないんだなということがわかったり、チューニングするとなったら時間が必要だなということが実感できてきています。

ここまでで、
・NNのざっくりとした中身何となくわかったよ
・神経構造に着想得ているの意味が何となく理解できたよ
・色々検討するから時間がかかてくるんだよ

というところが伝わると嬉しいです。


後編もあります!

さて、今回はここまでです。一通り読んでいただいて、全くAIのことを知らなかった方がなんとなくAIってこういうものなんだなと認識していただけると幸いです。後編では実際にNNをPyTorchを使ってコードも交えながら書いていきたいと思うので次回のデータサイエンティストのたまご育成日記も楽しみにしていただけると幸いです(3月中に出せるように頑張ります)!


alt


長谷川 智彦 Tomohiko Hasegawa


デジタルテクノロジー統括部 データ&テクノロジー ソリューション部 アナリティクスグループ

大学時代の専攻は植物学・分子生物学。最近趣味でデザインをかじり出した社会人1年目。植物の実験データを正しく解釈するために統計を勉強し始め、データ分析に興味をもつ。データサイエンスはただいま必死に勉強中。

※2021年3月現在の情報です。