【AIプログラミング】ニューラルネットワークの要素技術について勉強②

前回のニューラルネットワークの要素技術について勉強の続きです。

今回はバックプロパゲーションとかからかな。

ニューラルネットワークは、出力を行うときに値を変換する「活性化関数」や、正解との差をどのように定義するかという「誤差関数」というものがあることを勉強しました。今回は、正解との誤差を小さくするためのバックプロパゲーションについて勉強していきたいと思います。数式は使わず、言葉でどこまで表現できるか、ある意味挑戦です。

前回の記事はこちらをご参考ください。

ぱんだクリップ
【AIプログラミング】ニューラルネットワークの要素技術について勉強① | ぱんだクリップ 何となくライブラリで使ってきましたが、中身について詳しく勉強しないとハイパーパラメータが理解できないと思いました。 なんとなく使えてしまうライブラリってすごいね...

こんな人の役に立つかも

・機械学習プログラミングの勉強をしている人

・ニューラルネットワークの構成技術について大まかに知りたい人

・ニューラルネットワークの構成技術について数式での仕組みではなく、概念が知りたい人

目次

続、ニューラルネットワークの要素技術

バックプロパゲーション全体の流れ

ニューラルネットワークの訓練では、バックプロパゲーション(誤差逆伝播法)と呼ばれる方法で正解の値に近づけるように層間の重みを最適化していきます。

バックプロパゲーションは、

⑴訓練データを入れることでニューラルネットワークから「予測値を得る

⑵誤差関数で定義した誤差を求める方法で「⑴と答えを比較

⑶誤差関数を最小化するように「勾配降下法で重み(やバイアス)を更新

します。

⑴〜⑶を設定した回数(エポック数)分行い、ニューラルネットワークの訓練を行なっていきます。

エポック数について

ニューラルネットワークを何回学習させるか、のパラメータで「エポック数」というものがあります。

例えば、scikit-learnのアヤメのデータは全部で150個あります。100個を訓練データ、50個をテストデータとして取っておくとします。

100個が訓練データですので、この100個をニューラルネットワークの訓練に利用します。

この時、1エポックはこの100個の訓練データを全て利用することを意味しています。

100個の訓練データをエポック数分何回も繰り返すことで訓練を行います。

バッチサイズと学習方法の種類

バッチサイズという概念は、バッチサイズは、訓練データを何個に分けるか?というような設定になります。

先ほどの100個のアヤメデータを例にすると、バッチサイズを20と設定すると、20個×5セットとなり、5個のバッチに分割されます。

このバッチサイズを20に設定した訓練データ毎に先ほどのニューラルネットワークのパラメータ更新手順⑴〜⑶を行うと、1エポックで5回のパラメータ更新を行うことになります。

最近は、このように1エポックをバッチサイズで分けて1エポックで何回かパラメータを更新する手法をとるようです。

この方法を「ミニバッチ学習」というようです。

それに対して、1エポック=1バッチとなるような方法が「バッチ学習」、1バッチ=1サンプル、先ほどのアヤメデータの例でいうと、1個の訓練データ毎に更新処理を行うものが「オンライン学習」と呼ばれるようです。

諸問題により、ミニバッチ学習法がちょうどいいみたいですね。

局所最適解に陥りにくかったり、よくない方向への無駄な訓練が少なくなるとのことだよ。

重みパラメータなどの最適化の手法

重みやバイアス(先のバックプロパゲーションの⑶手順)を最適にしていくために、勾配降下法などの最適化手法が利用されます。数学的な方法です。

もっとも基本的なものに、「最急降下法」というものがあります。この最急降下法というものから色々工夫されて、今は「adam」という方法が主に利用されているみたいです。

⑵で求めた誤差関数に対して、パラメータで微分してあげることで最適なパラメータを見つけるらしいです。

すごい大雑把ですいません。今は「adam」の時代です。

この時、「学習率」という概念が出てきます。学習率は、最適化の過程に影響するパラメータになります。微分で求めた接線の傾きが0に近くなる部分が良い「重み」と見なされますが、傾きがある場合、もう少し移動させた場所の傾きが今より0に近いともっと良い「重み」があることになりますので、移動させて計算をする必要があります。

どれくらい移動させた点の「重み」でもう一度再挑戦するか、を係数で指定するため、学習率という係数で重みの値をどれくらい移動させるかを指定します。大抵、ハイパーパラメータとして「learning_rate」や「eta」という言葉で表現されています。0.01〜0.1という値が多いようです。1以上にするのはダメです。

ニューラルネットワークの実用的な進化系

CNN:動物の視覚野の仕組みが元らしいです。畳み込み層と呼ばれる仕組みを取り入れることで、画像認識や、自然言語処理に利用されています。

RNN:再帰型ニューラルネットワークと呼ばれる方法で、音声や株価など、時間の要素があるデータを処理できるようなアルゴリズムです。

GAN:敵対的生成ネットワークと呼ばれる教師なしアルゴリズムです。シマウマの色を馬の色にしたり、写真の絵に画家の画風変換をしたり、面白いことができます。

みんな色々工夫して手法を生み出していってるんだね。

より深く考察

勉強が進み、より深く勾配や勾配降下法について考察してみましたので、ご参考ください。

ぱんだクリップ
「勾配」の働き、ニューラルネットワークの勾配について考察 | ぱんだクリップ ニューラルネットワークの勾配について色々と考えてみました。 勾配について知ることでニューラルネットワークの理解が深まるね。 ニューラルネットワークを勉強すると、勾...
ぱんだクリップ
勾配降下法の仕組みについて考察、誤差関数の定義や勾配の降下を確認 | ぱんだクリップ 勾配に引き続き、勾配効果法についても、考察してみました。 理解は進んだのかな? 前回に引き続き、ニューラルネットワークの中の仕組みを理解しようと奮闘しています。今...
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次