ふくだ学習録とは?
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。
読了した本
データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]
ゼロから作るDeepLearningを読んで
勾配法とは?
損失関数が最小値になるパラメータを導き出すための方法の1つ。
現在の場所で、関数値が最小値になる方向(ベクトル)を探し、その方向に一定値進める。
その後、再度その地点で関数値が最小値になる方向を探し、その方向へ一定値進める。
それを繰り返して、損失関数が最小になるパラメータを見つけていく方法。
学習率とは?
勾配法を用いた際に、一回の移動でどれだけ移動するかどうかを表した数値。
大きすぎても小さすぎてもよくないため、正しく学習できているかを都度確かめながら、学習値の値を変更していく必要がある。
ハイパーパラメータとは?
重みパラメータなどの、訓練データから自動で獲得される数値ではなく、人間で設定しなければならない値。
確率的勾配法とは?
確率的に無作為に選び出したデータに対して、勾配降下法を行うこと。SGDという名前で実装されることが一般的。
エポックとは?
訓練データを使い切るまでの回数に対応する単位。
例えば訓練データが10000個あって、100個のミニパッチで学習をする場合は、100回繰り返せば全ての訓練データを見たことになる。(厳密には、ランダムでデータを選ぶことになるので、全てのデータを見ているわけではない)
この場合、1エポック=100回となる。
逆伝播とは?
学習フェーズにおいて、重みパラメータを正確にしていく(各重みパラメータに関する損失関数の勾配を求める)際、微分を連鎖律という考え方で積み重ねていき、逆算していく。その「微分を積み重ねていくこと」を逆伝播と呼ぶ。
ニューラルネットワークの学習全体像
前提
ニューラルネットワークは、適応可能な重みとバイアスがあり、この重みとバイアスを訓練データに適応するように調整することを「学習」と呼ぶ。ニューラルネットワークの学習は次の4つの手順で行う。
ステップ1(ミニバッチ)
訓練データの中からランダムに一部のデータを呼び出す。
ステップ2(勾配の算出)
各重みパラメータに関する損失関数の勾配を求める。
ステップ3(パラメータの更新)
重みパラメータを勾配方向に微小量だけ更新する。
ステップ4(繰り返し)
ステップ1、2、3を繰り返す。
Momentum、AdaGrad、Adamとは?
最適なパラメータを求めていくための手法方法のこと。
重みの初期値に関して
重みの初期値を正しく設定することで、学習のスピードが上がる。
重みの初期値は、活性化関数の種類によって設定仕分ける。
sigmoid関数やtanh関数の場合(左右対称かつ、中心付近が線形関数に近いもの)
1/√n
ReLU関数の場合
2/√n
※それぞれnはノードの個数
Batch Normalizationとは?
各層のアクティベーションが適度な広がりを持つように、強制的にアクティベーション分布を調整する手法。
ミニバッチでの入力データを、平均0、分散1のデータ集合に変換することで、アクティベーション分布を広げる、
活性化関数の前(もしくは後)に挿入することで使用する。
検証データとは?
ハイパーパラメータのチューニングを行うためのデータセット。
ハイパーパラメータの最適化手順
ステップ0
ハイパーパラメータの範囲を設定する
ステップ1
設定されrたハイパーパラメータの範囲から、ランダムにサンプリングする。
ステップ2
ステップ1でサンプリングされたハイパーパラメータの値を使用して学習を行い、検証データで認識精度を評価する。(ただしエポックは小さく設定)
ステップ3
ステップ1とステップ2をある回数(100回など)繰り返し、それらの認識精度の結果から、ハイパーパラメータの範囲を狭める。
ベイス最適化とは?
最適化を効率良く行なっていくための手法の1つ。
CNNとは?
畳み込みニューラルネットワークのこと。
「畳み込み層」と「プーリング層」がある。
代表的なCNN
LeNet
手書き数字認識を行うネットワーク。
1998年に考案された「初めてのCNN」。
AlexNet
画像認識のCNN。
LetNetを進化させたもの。
演算精度のビット削減
ニューラルネットワークでの演算を行う際、数値精度(何ビットのデータで数値を表現するのかということ)に関しては16ビットの半精度浮動小数点数で十分問題なく学習できる。
理由は、ニューラルネットワークにはロバスト性(データに多少のノイズが入っても出力結果が変わりにくい性質)があるから。
今日の一言
「ゼロから作るDeepLearning」読み終えた!
終盤は駆け足になってしまったけど、どういう理論でディープラーニングというものが成り立っているのか理解できた!
でも実際にそれをどんな形で利用していくべきか、または利用する方法に関しては、学ぶことができなかったので、自分でアプリ作ってみて、そこで機械学習させてみる!(使うとしたら一旦TensorFlowでいいのかな?って感じしてるけど、どうなんやろ。。。?)
次はcakePHP!!!