ニューラルネットワーク(多層パーセプトロン)は、機械学習の重要な産物である。シグモイド関数を活性化関数とするオートエンコーダー(砂時計型ニューラルネットワーク)はその初歩として、重要なアイディアである。そのメモを作ってみた。
写像とは(写像関数、線形写像、非線形写像)
(参考)
ニューラルネットワーク
ニューラルネットワーク(=多層パーセプトロン(MLP))の例;あやめデータから出力(判別情報など)を見るニューラルネットワークの構成例を引用します。
この図で丸印を「ノード」と呼び、ノードを接続している線を「辺」と呼ばれます。
(余談;あやめのデータとは?)【python】iris(アヤメ)のデータセットをpandasとseabornを使って可視化する
「ノード」「辺」は何を表しているのか?;パーセプトロン ネットワークは、一連の重み $w_{i,j}$ を介して $R$ 個の入力( $R$ 個の要素をもつ入力ベクトル)に結合された $S$ 個のノード(パーセプトロン ニューロン)から成る単層から成り、
ネットワーク インデックス i および j は、 $w_{i,j}$ が j 番目の入力から i 番目のニューロンへの結合の強度であることを示します。重み付けされた入力の和が「活性化関数」に送られ出力となります。辺はこの結合(とある層から次の層へのそれぞれの結合であり、そこでの重みは $w_{i,j}$ です。本図内ではバイアスから入力 $b_j$ 、および「活性化関数」が返した0~1 への係数係数 $a_j$ も図中に示されています。
※用語が交錯していますがMatlabのサイトの図が本来のニューラルネットワークの設計なので引用しています。
ニューラルネットワークでの使用に適した関数
- ニューラルネットワークで使用される関数を活性化関数と呼ぶ
- 活性化関数は固定したまま「問題とする系」に最適な係数を決めること=学習
- 現実的な「学習」を実装できることが必要=バックプロパゲーション学習(誤差逆伝播法)が勾配法で実現できる
- 活性化関数は「問題とする系」の特徴に合わせて選ばれているというよりは、ニューラルネットワークに適したものを活性化関数として選ぶ
シグモイド関数
$$
{y = \cfrac{1}{1 + e^{-x}}}
$$
(参考)
バックプロパゲーション学習(誤差逆伝播法)と勾配法
勾配法を用いることで、「学習」を実装できる
例えば「最急降下法(さいきゅうこうかほう、英: Gradient descent, steepest descent)[1]は、関数(ポテンシャル面)の傾き(一階微分)のみから、関数の最小値を探索する連続最適化問題の勾配法のアルゴリズムの一つ。勾配法としては最も単純であり、直接・間接にこのアルゴリズムを使用している場合は多い。最急降下法をオンライン学習に改良した物を確率的勾配降下法と呼ぶ。 」引用
シグモイド関数の場合、誤差逆伝播法における逆伝播は
$$
{\cfrac{\partial y}{\partial x} = y(1 - y)
}
$$
(参考)
砂時計型ニューラルネットワーク(=オートエンコーダー)
ニューラルネットワークの中でも特に以下の形状になっているものをオートエンコーダーと呼ぶ。オートエンコーダの学習は、入力データと一致するデータを出力することを目的とする教師なし学習です。オートエンコーダのネットワークは、入力したデータの次元数をいったん下げ、再び戻して出力するという構造になっています。
シンプルなオートエンコーダのエンコーダおよびデコーダ部分を多層化した構造を積層オートエンコーダと呼びます。入力データはエンコーダにおいて段階的に次元を減らし、デコーダで復元されます。エンコーダおよびデコーダを多層化することで、非線形性が増し、より複雑で高度な特徴量抽出を狙っています。
シグモイド関数以外のニューラルネットワークでの活性化関数
(以下はニューラルネットワークでの使用に適した関数を紹介する)
ステップ関数(step) ; もっとも歴史ある活性化関数。誤差逆伝播によるパラメータの最適化ができない。
$$
{y = \left\{
\begin{array}{cc}
1 & (x \gt 0) \\
0 & (x \le 0)
\end{array}
\right.
}
$$
ステップ関数(step)と比べ、シグモイド関数は連続関数であるので勾配法に適し、機械学習の初期に活躍した。バックプロパゲーション学習(誤差逆伝播法)での最適化計算コストが現実的であり、理解しやすい。初期値依存性や局所解への収束などの問題もあり、近年はReLUなど不連続な関数を用いた機械学習も報告されている。(以下2点はシグモイド関数以外のニューラルネットワークでの使用に適した関数の例です)
tanh関数(Hyperbolic tangent function: 双曲線正接関数) ; sigmoid関数の微分の最大値が0.25であるという弱点を解決する関数の一つとして提案、勾配消失の原因を取り除く
$$
{y = \tanh x = \cfrac{e^x - e^{-x}}{e^x + e^{-x}}
}
$$
逆伝播は
$$
{\cfrac{\partial y}{\partial x} = \textrm{sech}^2 x = \cfrac{1}{\cosh^2 x} = \cfrac{4}{(e^x + e^{-x})^2}
}
$$
ReLU関数 ; 最近に提案されて覇権を握っている活性化関数です。その特徴はなんと言ってもそのシンプルで高速な演算
$$
{y = \left\{\begin{array}{cc}x & (x \gt 0) \\0 & (x \le 0)\end{array}\right.}
$$
逆伝播は
$$
{y = \left\{
\begin{array}{cc}
x & (x \gt 0) \\
0 & (x \le 0)
\end{array}
\right.
}
$$
ソフトマックス関数 ; 多値分類問題の出力層の活性化関数として用いられます。その計算の特性上出力を確率として見なすことが可能です。また、sigmoid関数の拡張版の関数となっています。
$$
{y_i = \cfrac{e^{x_i}}{\displaystyle\sum_{k=1}^{n}{e^{x_k}}} \quad (i = 1, 2, \ldots, n)
}
$$
(参考)
オートエンコーダーについての簡単な紹介のまとめ
オートエンコーダーは深層学習としてヒットした。その要因は
- バックプロパゲーション学習(誤差逆伝播法)が低計算コストな活性化関数の採用
- 多層にすると非線形性の高い問題に適用できる砂時計型ニューラルネットワークの採用
シンプルなオートエンコーダーの問題点は
- 最適なニューラルネットワークの設計はトライ&エラー(機械学習のチューニング)が必要
- (明言されていないが)「問題とする系」のデータは連続的なパラメータが望ましい
- ベクトルサイズが固定されている
※特にオートエンコーダーの入力に関する制約がある
連続的なパラメータではない現実のデータ;
- 離散的(True/Falseデータのような)
- スパース(0が多い)
- 記号、文字列、文章
有名な機械学習の参考文献
- 東大 松尾研 Jupyter notebook資料
- 演習コンテンツ 公開ページ
- 東京大学 杉山・本多・横矢研究室:機械学習と統計的データ解析 コンピュータはどこまで賢くなれるのか? 機械学習の理論構築,アルゴリズム開発,実世界応用
(ここまで)