C×Labo

主にプログラミング関係について書いていきます。

順伝播型ネットワーク(多層パーセプトロン)

__________________________________________________________________________
【目次】

__________________________________________________________________________

ニューラルネットワークの仕組み


ニューラルネットワークでよく見るこの図
f:id:c-laboratory:20170506010036j:plain


u=x_1w_1+x_2w_2+x_3w_3+x_4w_4+b

ニューラルネットワークは、
入力層のユニット(x)に重み(w)を掛けバイアス(b)を足して新たなユニット(u
を作ること!(?)

この新たなユニットっていうのは深層学習(ディープラーニング)でいう中間層の一つになるんだと思う。

ニューラルネットワークを複雑化したがディープラーニングっていう認識

f:id:c-laboratory:20170506002425j:plain

数式で書くとこうなるらしい。

{ \displaystyle
u_j = \sum_{i=0}^{I} w_{ji} x_i + b_j
}
z_j = f(u_j)



このくらいの数式ならなんとかまだ分かるが、機械学習に出て来る数式は、
基本理解できていない・・

二つ目の式のz_j = f(u_j)は何かというと、
活性化関数を適用したものの出力である。

活性化関数

活性化関数とは、ニューラルネットワークにおいて線形変換をした後に適用する非線形関数もしくは恒等関数のこと。

ん?難しい。
私は、上述した数式の出力値(ここでいうz)を決めるものだと覚えた。

活性化関数は様々な種類があるが、ここでは以下の3つの特徴を書いていく。

 入力の絶対値が大きな値をとると出力が飽和し、一定値になり、その間の入力に対して出力が徐々にかつ滑らかに変化。

  • ソフトマックス関数{ \displaystyle z_k= \frac {exp(u_k)}{\sum_{j=0}^{K} exp(u_j)}} (出力のk番目のユニットの出力の場合)

 他の活性化関数の場合、ユニットkの値の出力z_kは、同ユニットへの総入力u_kのみから決定されるのに対し、この関数ではこの層の全ユニットへの総入力によって決まるという特徴がある。

  • ReLU関数(ランプ関数)f(u)=max(u,0)

 計算量が小さく、学習が速く進み、よい結果が得られることで主流の関数。
入力が0を超えていたらそのまま出力、0以下なら0を出力。

学習とは?

 機械学習では、訓練データとテストデータという言葉がよく出る。
訓練データとは、ある数値等を入力したときに望ましい出力(正解のデータ)にするためのデータであり、
テストデータは訓練データで学習した内容と試すデータである。
では、ここでいう学習とは何か?
訓練データは、1つの入力に対して望ましい出力があり、パラメータ(今回の場合はw)を変えることによってこの望ましい出力に近づけるようにする。このパラメータを調整することを学習と呼んでいる。

誤差関数

訓練データと、正解のデータに近づけるためのコンピュータが内部で計算している関数との近さをどのように測るか、その尺度が大切である。この尺度のことを誤差関数と呼ぶ。

今回2つの誤差関数を簡単に簡単に紹介する。(数式を知りたい人はごめんなさい)

  • 二乗誤差

 主に回帰問題で使われる(らしい)。

 主に多クラス分類で使われる(らしい)。

以上。
数式の詳しい説明は私ができないので書籍等を参考にしてください。

 二値分類と他クラス分類を別で書いているところもありますが、
二値分類のものを他クラス分類の書き方で書いても得られる結果は同じだそう。

 ソフトマックス関数を出力層の活性化関数で使用すると、
学習の進み具合が著しく遅くなる等があるため、
通常は重み減衰やこの層のユニットを適当に1つ選び、
そのユニットへの入力を強制的に0にする方法をとると良いそうだ。