ディープラーニングの勉強 ~その1~
今、興味本位からディープラーニングの勉強を進めています。ただ本を読むだけではなかなか理解が進まないので、自分が読んで理解したことを文章に書き出してみました。そうして改めて客観的に教本と読み比べてみることで、間違って理解していそうなところや理解が曖昧なままになっている部分を修正しながら、理解を深めてみています。とても時間と労力がかかるので、試験前の一夜漬けには向かないですが、理解が脳に染み込んでいく感じがあって効果を実感しています。
そんなこんなでせっかく書いたので、勉強の成果のポートフォリオのような感じで note にも上げておこうと思いました。ご笑覧いただけたら幸いです。また、間違いなどご指摘いただけたら望外の喜びです。
ニューラルネットワークの基礎的アルゴリズム:パーセプトロン
ニューラルネットワーク(ディープラーニング)の起源とされるのがパーセプトロンである。
パーセプトロンは、各入力信号に重みを付けた値とバイアスの和を基に、決まりに従って特定の値を出力するアルゴリズムである。出力する値を決定する決まりを定義した関数を活性化関数という。パーセプトロンを用いると、重みとバイアスを考慮した入力値に対する閾値を設定することで出力する値を決めることができる。これを用いて、例えば入力値に応じて「0/1」を出力するAND回路やOR回路を作ることができる。また、1個のパーセプトロンでは表現できない場合は、複数のパーセプトロンを組み合わせることで表現できるようになる。これを多層パーセプトロンという。各パーセプトロンにどのような働きを持たせるかは、重みとバイアスと閾値で決まるが、これを学習を通して自動で決定するのがニューラルネットワークである。ニューラルネットワークでは、これらのパーセプトロンのことを「ニューロン」または「ノード」という。
ニューラルネットワークは、入力層、隠れ層、出力層の3種類の層で構成され、いくつものニューロンによって構成されるが、いずれも各入力信号に対する重み、バイアス、活性化関数のみの違いであって、基本的な原理は変わらない。
活性化関数
単層の単純パーセプトロンでは活性化関数にステップ関数が用いられるが、ニューラルネットワークではシグモイド関数やReLU関数が用いられる。ステップ関数は、特定の閾値を境に出力する値が変わる。一方で、シグモイド関数やReLU関数は関数に入力される値に応じて出力される値が連続的に決定される。ここで、いずれにも共通することは、活性化関数は非線形関数である必要があることである。仮に活性化関数に線形関数を用いてしまうと、それをいくら多層に重ねても、それを表現するパーセプトロンが作れてしまうことに由来する。すなわち、多層にする意味がなくなってしまう。
ニューラルネットワークで解ける2つの問題:分類問題と回帰問題
ニューラルネットワークは、分類問題と回帰問題に用いられる。分類問題は、白か黒か、というような分類した結果を得る。回帰問題は、連続的な値によって予測した結果を得る。
ニューラルネットワークを構成するニューロンのうち、出力層だけは活性化関数が他とは異なる。問題の種類によって使い分けられており、一般に、分類問題ではソフトマックス関数が、回帰問題では恒等関数が用いられる。ソフトマックス関数は、指数関数によって入力信号を変換する関数で、すべての出力の和は1になるのが特徴である。それゆえ、ソフトマックス関数による出力結果は「確率」のように解釈することができる。但し、ソフトマックス関数の計算はそれなりの計算量になるため、ソフトマックス関数を使わずとも結果の数値の大小が変わらないことを利用してソフトマックス関数を省略することもある。恒等関数は、入力された値をそのまま返す関数である。
今週はここまで。来週は、ニューラルネットワークを掘り下げてみます。
参考にしている教本
斎藤康毅:ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装.オライリージャパン,(2016)
https://www.oreilly.co.jp/books/9784873117584/
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?