オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【深層学習】Long Short-Term Memory / LSTM

こんな方におすすめ

深層学習・ディープラーニングでも必要な「Long Short-Term Memory : LSTM」の基本的な内容について知りたい.

Index

Long Short-Term Memory : LSTMとは

RNN のネットワークアーキテクチャを基本とした、拡張したモデル.

RNN との違い

LSTMは、計算グラフの構造が RNN と異なる.

以下が、RNN の計算グラフ.



このグラフに「記憶セル」と複数の「ゲート」という機構を搭載することでLSTMの計算グラフが出来上がる.

「記憶セル」と「ゲート」を注目してまとめる.

これらの概念に触れる前に、計算ノードを簡略的に表現する

tanh」と表記があるものは同様の計算ノードを簡略したもの.

記憶セル

「記憶セル」の役割は、その名前の通り「記憶」・「情報を保持」する.

そのため、自身のLSTMレイヤ内の伝達しか行わない.

ゲート

「ゲート」の役割は、情報の量をコントロールすること.

「ゲート」としてのパラメータは0.0 ~ 1.0 の整数値で、どの程度の情報を流すかをコントロールする.

Outputゲート

「Outputゲート」は次の出力となる情報がどれだけ重要かどうかを判断する.

その名の通り、「Output」の情報のコントロールを行う.

Forgetゲート

「Forgetゲート」は「記憶セル」に作用するゲート.

「記憶セル」は次時刻への記憶セルにそのまま情報を伝えられるわけではない.

前時刻の「記憶セル」の情報が「Forgetゲート」によりどれだけ重要な情報かを判断する.(忘れさせられる)

新しい情報

「Forgetゲート」により、過去の記憶を忘れさせられた「記憶セル」は新しい情報を取得する.

Inputゲート

そしてまた、新しい情報がどれだけ重要かを判断する「Inputゲート」を設ける.



まとめ

このように、RNN のような単純な構造に「記憶セル」と複数の「ゲート」を搭載することで、 LSTMという新しいアーキテクチャを構築した.

参考

書籍

Web サイト

【深層学習】リカレントニューラルネットワーク #アルゴリズム編

こんな方におすすめ

深層学習・ディープラーニングでも必要な「リカレントニューラルネットワーク (Recurrent Neural Network : RNN)」の基本的な内容について知りたい



この記事では、リカレントニューラルネットワーク (Recurrent Neural Network : RNN)の基礎概念のまとめを行う.

「これから、機械学習ディープラーニングの学習をしたいから、 その基本となるリカレントニューラルネットワーク (Recurrent Neural Network : RNN)の理解を深めたい」 という方に向けた記事.

キーワード・知ってると理解がしやすい

Index

リカレントニューラルネットワーク (Recurrent Neural Network : RNN)とは

リカレントニューラルネットワーク (Recurrent Neural Network : RNN)とは、DNNのアーキテクチャの一つ.

通常のDNNのアーキテクチャでは、フィードフォワードと呼ばれる、流れが一方向のネットワークが使用される.

DNNのネットワークアーキテクチャ



RNNの特徴としては、リカレント(再帰的)の名称の通り、処理の流れが循環するようなアーキテクチャ.

歴史

1986年のデビッド・ラメルハートの研究で発案された模様.

レイヤ視点でのRNN その1

レイヤ視点で RNN を確認する.

まずは、単層をみてみる.

レイヤ視点のRNN



通常のネットワーク(フィードフォワードネット)では、入力  x に対して出力は  h の1つのみ.

しかし、リカレントニューラルネットワークは出力を再度、入力として加え、今までの情報を記憶しながら学習する.

さらに、レイヤの構造を詳細に見る.

ループ展開するとこのようになる.

ループ展開したRNN



このようにループを展開することで、右方向に伸びる長いニューラルネットワークと理解することができる.

入力にある  x_t は時刻  t における入力を表現している.

ノード視点でのRNN

では、RNN はレイヤ内で、どのような計算をしているのか.

上の図からわかるように、入力は  h_t-1 x_t で、出力は  h_t.

計算式は以下のようになる.

 \displaystyle{
h_{t}\ =\ \tanh(h_{t-1}W_{h}\ +\ x_{t}W_{x}\ +\ b)}



  • 入力

    • x_t : 時刻t の入力
    • h_{t-1} : 時刻t-1 の中間出力

  • 出力

    • h_t : 時刻t の中間出力

  • パラメータ

    • W_{h} : 前時刻の中間出力h_t-1を次時刻の中間出力h_tに変換する重みパラメータ
    • W_{h} : 入力xを中間出力hに変換する重みパラメータ
    • b : バイアスパラメータ

以上の計算をノード視点で考える.

ノード視点のRNN



ノード視点で考えることで以下の理解も深まる.

レイヤ視点でのRNN その2

RNN レイヤもひとつのレイヤにすぎないので、他のレイヤと組み合わせてネットワーク全体を構築する.

word2vec のような「言語モデル」を、例としてネットワーク全体を構築する.

構成されているレイヤは以下.

  • Embedding レイヤ
  • RNN レイヤ
  • 全結合層(Affine レイヤ)
  • Softmax レイヤ

レイヤ視点でのRNN その2



上図のように、複数のレイヤと一緒にネットワーク全体のアーキテクチャを構築する.

RNNの利点

このようなアーキテクチャにする利点は、時系列データ / 自然言語データの学習に効果的.

時系列データや自然言語データのタスクでは、ある時刻の変数を前時刻の情報から推測する.

しかし、通常の DNN のネットワークアーキテクチャだと、その系列情報までうまく学習することができない.

RNN のように過去の出力も入力の一部として取り込むことで、結果的に系列情報を学習するような仕組みをつくることができる.

まとめ

実装編

参考

書籍

Web サイト

【深層学習】ディープニューラルネットワーク / Deep Neural Network / DNN #アルゴリズム編

こんな方におすすめ

深層学習・ディープラーニングでも必要な「ディープニューラルネットワーク (Deep Neural Network : DNN)」の基本的な内容について知りたい.



この記事では、ディープニューラルネットワーク (Deep Neural Network : DNN)の基礎概念のまとめを行う.

「これから、機械学習ディープラーニングの学習をしたいから、その基本となるディープニューラルネットワーク (Deep Neural Network : DNN)の理解を深めたい」という方に向けた記事.

この記事では、ディープニューラルネットワーク (Deep Neural Network : DNN) アーキテクチャレイヤ視点で考える.

Index

一言でDNNとは

ニューラルネットワーク関数を複数連結させ、層を深くしたニューラルネットワーク.

多層ニューラルネットワークと同義.

構成要素

ディープラーニングには、様々なアーキテクチャがありますが、最も基本的なアーキテクチャを考える.

以下レイヤ視点から見た基本的なアーキテクチャ.



アーキテクチャの構成要素は以下の3つ.

  • アフィン変換レイヤ (Affine Layer)
  • 活性化関数レイヤ (Activation Function Layer)
  • 誤差関数レイヤ (Loss Function Layer)

アフィン変換レイヤ / Affine Layer

積と和の計算で線形変換を行う.

全結合レイヤ (Fully Connected Layer)」とも呼び、
「全結合レイヤ (Fully Connected Layer)」 、「活性化関数レイヤ (Activation Function Layer)」、「誤差関数レイヤ」
のみで構成されたモデルを「全結合モデル」と呼ぶ.



活性化関数レイヤ / Activation Function Layer

入力に対し、活性化するかどうかを決定する.

非線形関数を使用することが多い.

予測を出力する最後の活性化関数は、タスクに応じで変更される.

例 : シグモイド関数 / ステップ関数 / ReLu関数 / ect...

誤差関数レイヤ / Loss Function Layer

予測と正解(ラベル)から誤差を計算する.

誤差の計算方法は、タスクやアーキテクチャなどにより異なる.

まとめ

この記事では、DNNの基本的なアーキテクチャをレイヤ視点での構成要素をまとめた.

実装編

参考

【深層学習】畳み込みニューラルネットワーク #概念編

Index

手書き数字認識

手書き数字認識というタスクを考える.



入力は手書き数字の画像で、出力は 0 ~ 9 の10クラスの事後確率.

ニューラルネットワークモデル

ニューラルネットワークモデル (NNモデル) の利用を前提に手法を検討する.

手書き画像のそれぞれには、もちろん微妙な違い(平行移動・縮小拡大・回転)があり、その違いに対して不変性・柔軟性・頑健性を必要とするので、NNモデルを前提に進める.

単純なアプローチ

単純なアプローチは全結合のネットワークへの入力として画像を扱うこと.

しかし、このアップローチは画像の重要な特性・情報を見落としている.

すなわち、距離の近いピクセル同士は相関・関連性が高く、距離の遠いピクセル同士は相関・関連性が低いということ.

畳み込みニューラルネットワーク

次のアプローチとして「畳み込みニューラルネットワーク(Convolutional Neural Network : CNN)」を考える.



CNN には3つ機構が含まれる.

  • 1 局所的受容野 (local receptive field)
    • 「畳み込み層」、「プーリング層 / 部分サンプリング層」における機構
  • 2 重み共有 (weight sharing)
    • 「畳み込み層」 における機構
  • 3 部分サンプリング (sub-sampling)
    • 「プーリング層 / 部分サンプリング層」における機構

局所的受容野 (local receptive field)

画像のある注目点について考えたとき、その注目点の近傍の点と関係が強く、離れるほど関係が弱くなっていくという考えのもと、 次のNNの層への入力を近傍のユニット群のみにするという機構.

この機構により、精度とパラメータ計算コスト効率を向上さている.

重み共有 (weight sharing)

画像の注目点ごとにパラメータを変えるのではなく、共有のパラメータを使うことで、パラメータ計算コストを向上させている.

部分サンプリング (sub-sampling)

CNN の「プーリング層 / 部分サンプリング層」に用いられている機構.

特徴量の統計量を計算することで、 画像のゆがみ (平行移動・縮小拡大・回転) に対して、影響を受けにくい不変性・柔軟性・頑健性をもつことが期待できる.

Channel 次元の増減

画像データは(Batch Size, Height, Width, Channel) の形式で利用されることが多い.

Height / Width が増減されることは、局所的な情報の抽出・要約を行っていることであり、 Channel の増加は、ある座標においての、RGB 以外での表現の仕方の模索である.

参考

書籍

Web サイト

【自然言語処理】Word2Vec

  • こんな方におすすめ

深層学習・ディープラーニングでも必要な「Word2Vec」の基本的な内容について知りたい。



キーワード・知ってると理解がしやすい



ニューラルネットワーク yhayato1320.hatenablog.com

分散表現 yhayato1320.hatenablog.com

Index

出典

2013 年 Mikolov らによって提案された手法.

「word2vec」とは

単語 (Word) をベクトル (Vector) として表現、変換するための手法の1つ

Word To Vector


単語に対して、文脈非依存の分散表現を学習するモデル. 単語に文脈非依存の分散表現を与えることを、単語埋め込み (Word Embedding)という.

単語の分散表現

単語を固定長のベクトルで表現することを「単語の分散表現」(Word Embedding) と呼ぶ.
word2vec も単語の分散表現を取得する手法の1つ.

単語の分散表現

分布仮説

「単語の意味は周囲の単語によって形成される」という前提・アイディア・考え.

分布仮説

「カウントベース」と「推論ベース」

ここでは、カウントベースについては言及しませんが、自然言語処理において、単語の分散表現を取得する手法としては、大きく分けて2つある.
1つは「カウントベース」と言われる手法で、1つは「推論ベース」と言われる手法.
word2vec は、「推論ベース」に含まれる手法.

推論ベース

推論ベース

推論ベースという名称なので、この手法は、
ある「入力」から何かを「出力=推論結果」するような形式をとる.
どんな入力からどんな出力を推定するモデルなのかがポイントになる.

ニューラルネットにおける単語の処理方法

ニューラルネットで単語を処理するには、それを「固定長のベクトル」に変換する必要がある. そのための方法のひとつは、単語を one-hot 表現 / ベクトルへの変換する.

word2vec のモデル

word2vec で使用されるモデルは、ニューラルネットワーク (NN) を用いられることがスタンダードで、有名なモデルは2つある.

  • CBOW モデル
  • skip-gram モデル

word2vec

2つのモデルを紹介.

CBOW モデル

Continuous Bag-of-Words (CBOW) は、「コンテキスト」から「ターゲット」を推測するNNモデル. (ターゲットは文章中の一単語、その周囲の単語がコンテキスト)

CBOW モデルへの入力は、コンテキストの one-hot ベクトル集合で、出力は単語の予測スコア. 以下の図のようなイメージ.


CBOWモデル

ここでは、コンテキストは予測する単語(ターゲット)の前後をコンテキストとしているため、2つの入力があるような図に見える、、、
しかし、入力が複数ある場合は、入力を複数にする.


入力層から中間層への変換に利用している重み  W_{in}分散表現となる.  W_{in} は (語彙の数) x (変換後のベクトルの次元数) となり、この分散表現を利用すれば、語彙に含まれる 単語 one-hot ベクトルが 変換したい次元のベクトルに変換できることがわかる.



事後確率を利用して、確率モデルとして考えると以下のようになる.

CBOW の確率モデル

 P(w_{t} | w_{t-1}, w_{t+1})

skip-gram モデル

skip-gram モデルは、CBOW モデルとは逆で、「ターゲット」から「コンテキスト」を推測するNNモデル. つまり、ある単語(ターゲット)から周囲の単語(例えば前後の単語など = コンテキスト)を予測するモデル.


skip-gramモデル

入力は、ターゲットとなる単語の one-hot ベクトルで、 出力は、コンテキストとなる複数の単語 の one-hot ベクトルの集合となる.


CBOW と同様、コンテキストは予測する単語(ターゲット)の前後をコンテキストとしているため、2つの出力があるような図に見えるが
出力が複数ある場合は、出力を複数にする.


事後確率を利用して、確率モデルとして考えると以下のようになる.

skip-gram の確率モデル

 P(w_{t-1}, w_{t+1} | w_{t})

分散表現としての利用

二つのモデルとも目的は、単語の分散表現を取得すること.
では、上のモデルで学習を行い、パラメータ (上図での W_in と W_out)が最適化されたとして、どのように分散表現と利用するのか?
それは、、、W_in (または W_out と両方)を分散表現のベクトルして利用する.

分散表現としての利用

問題点

Word2Vec の「各単語に対して一意に分散表現を与える」という性質は、 多義語を扱う際に問題になる.


  • 彼は舞台の上手に立った。
  • 彼は料理が上手だ。
上の二つの文章では異なる意味の「上手」が使われている. しかし、Word2Vec では、「上手」という単語に与えれられる分散表現は一意に定まるため、 このような「文脈に応じた意味の変化」を扱うことができない.


また、単語の分散表現を利用して、文章をベクトルで表現することを考える.
その場合、文中の単語の分散表現の(重み付き)平均を利用することがあるが、 そうなると、文章の語順が考慮されないことになる.


  • ジョンはボブに本を貸した。
  • ボブはジョンに本を貸した。
上の場合、各単語を分散表を利用してベクトル化した後、(同じ重みで)平均をとり、文章ベクトルを作成したとき、 同じ値になってしまう.


そこで、ELMo のような文脈化単語埋め込み (Contextualized Word Embedding)が利用される.

参考

【深層学習】畳み込みニューラルネットワーク #アルゴリズム編

  • こんな方におすすめ

深層学習・ディープラーニングでも必要な
畳み込みニューラルネットワーク /
Convolutional Neural Network ; CNN

の基本的な内容について知りたい.


「これから、機械学習ディープラーニングの学習をしたいから、
その基本となる畳み込みニューラルネットワーク /
Convolutional Neural Network ; CNN
の理解を深めたい」という方に向けた記事.



yhayato1320.hatenablog.com

yhayato1320.hatenablog.com

Index

全体の構造

まずは CNN の大枠を理解するために、CNN のネットワーク構造の全体から見ていく.

畳み込みニューラルネットワーク

畳み込みニューラルネットワーク / Convolutional Neural Network : CNN
全結合 / Fully Connected のニューラルネットワークに加えて、
「畳み込み層 / Convolution Layer」「プーリング層 / Pooling Layer」
新しく組み込まれたネットワーク構造.

つまり、CNN の理解には、各層の理解が必要なる.

畳み込み層

畳み込み層 / Convolution Layer の理解に必要になってくる要素は以下の 3 つ.

  1. 畳み込み演算
  2. パディング / Padding
  3. ストライド / Stride

畳み込み演算

畳み込み演算は畳み込み層 / Convolution Layer で行われるメインの計算である.

後述するパディング/ Paddingストライド / Stride
畳み込み演算の設定、パラメータのようなものである.



畳み込み演算は、画像処理におけるフィルター演算に相当する.

yhayato1320.hatenablog.com

畳み込み演算を理解する手がかりとして、下図の具体的な計算方法を考えていく.



畳み込み演算は、入力の行列データに対して、
フィルター行列を適用して、行列データを出力する.

フィルター行列は、カーネル行列とも呼ぶ.



おおまかな、処理の流れを以下に記す.

  1. 入力の行列データに、フィルター行列を適用する範囲を決定する.
  2. 適用する範囲に対して、フィルター行列との和積演算 (要素を乗算し、その和を求める) を行う.
  3. その結果を対応する出力行列の一部に格納する.



フィルター行列を適用する範囲をずらして (スライドさせて) いくことで、
このプロセスを繰り返し、入力の行列データ全体に適用する



フィルター行列の値は、何でも良いわけではなく、
このフィルター行列の値は、学習していくパラメータになるわけである.

全結合のニューラルネットネットワークと同様に、
最後にバイアスパラメータを (各要素に) 足し合わせて出力となる.

パディング / Padding

畳み込み層の処理を行う前に、入力データの周辺に固定のデータ (0など) を
埋める処理を行うことがある.

これを パディング / Padding といって、畳み込み演算ではよく用いられる処理.

畳み込み演算における、Padding とは pad (詰め物)を埋めることを意味し、埋め込みの意味.

では、「何」を「どこ」に埋め込むかというと、「任意の数値」を「入力の行列の外側」に埋め込む処理を行う.



畳み込み演算は、入力の行列のサイズがフィルターの大きさ以上でなければ計算できない.
そこで、「任意の数値(影響はなくすため0が多い)」を「入力の行列の外側」に埋め込んだ後に畳み込み演算を行う.



上の例では、入力データ周辺に幅 1 のパディングを適用している.



パディングをすることで出力の行列の大きさをコントロールする.
パディングの幅を大きくすることで、畳み込み演算の出力を大きくできる.

ストライド / Stride

フィルターを適用する位置の間隔をストライド / Stride という.

ストライド / stride は英語で歩く、闊歩すると意味で、
フィルター行列が入力の行列データを移動していく
(歩いていく、少しづづずれていく) ようなイメージ.





上の例では、フィルター行列が、 入力の行列データの上を1マスずつずれていくように 移動しているが、動く幅も畳み込み演算の1つの設定になる.

その動く幅をストライド / Stride と呼ぶ.



例えば、下のようにストライド 2 にすると、フィルターを適用する間隔が  2 要素ごとになる.



ストライドを大きくすると、
出力された行列の大きさが小さくすることができることがわかる.

出力サイズ

上で、述べてきた、パディング / Padding と ストライド / Stride で大きさを
畳み込み演算の出力の大きさをコントロールすることができることがわかる.

では、ここで、入力のサイズとパディング / Padding、 ストライド / Stride の関係を
定式することで、出力サイズがどのように計算されるかを考える.

出力サイズ

 
\begin{align}
OH\ &=\ \displaystyle \frac{H\ +\ 2P\ -\ FH}{S}\ +\ 1\\
OW\ &=\ \displaystyle \frac{W\ +\ 2P\ -\ FW}{S}\ +\ 1
\end{align}



  • 入力サイズ :  (H,\ W)
  • フィルターサイズ :  (FH,\ FW)
  • 出力サイズ :  (OH,\ OW)
  • パディング (の幅) :  P
  • ストライド (の幅) :  S

プーリング層 / Pooling Layer

プーリング層 / Pooling Layer では、縦・横方向の空間を小さくする演算を行う.

部分サンプリング / Sub-Sumpling とも呼ばれる処理.



対象の領域を一つの要素に集約するような処理を行い、空間サイズを小さくする.



上の処理は、 2 \times 2Max Poolingストライド 2 で行った場合.

具体的な処理の流れは、

  1. 処理を適応する入力の行列データの範囲を決定
  2. 決定した範囲の要素の中で、最大の要素を計算
  3. その結果を対応する出力行列の一部に格納



このプロセスを繰り返し、入力の行列データ全体に適用する

yhayato1320.hatenablog.com

プーリング層 の特徴

  • 学習するパラメータがない
  • チャンネル数は変化しない
  • 微小な位置変化にロバスト

まとめ

  • 畳み込みニューラルネットワーク(Convolutional Neural Network : CNN)
    畳み込み層 / Convolution Layerプーリング層 / Pooling Layer の2つ処理を繰り返し行う構造である.

  • 畳み込み層 / Convolution Layer畳み込み演算を行うことで、
    入力データ (画像等) から特徴を抽出するパラメータを学習する.

  • プーリング層 / Pooling Layer では、入力データの情報を縮小させていく.

参考

【深層学習】フィードフォワードネットワーク / Feed Forward Network #アルゴリズム編

  • こんな方におすすめ

深層学習・ディープラーニングでも必要な「フィードフォワードネットワーク関数」の基本的な内容について知りたい.



この記事では、フィードフォワードネットワーク関数の基礎概念のまとめる.

Index

線形基底関数モデルからニューラルネットワークモデルへ

テーブルデータ等における予測モデルでは、線形回帰モデルや線形識別モデル、 それを一般化した線形基底関数モデルを用いることがある.

精度を上げるためにデータの情報を増やす(次元を増やす)ことがありますが、それには「次元の呪い」等の問題が生じる.

そこで、事前に基底関数の数を固定し、それらを適応的にしておくという考えがでてくる.

その手法で最も成功したモデルが「フィードフォワードニューラルネットワーク」.

フィードフォワードネットワーク関数

処理の全体象イメージ.

image



関数全体の定式化の前に、各処理ごとに定式化していく.

活性の計算

入力変数 x_1,\ \cdots,\ x_D の線形和を作る.


\displaystyle{
a_{j}\ =\ \sum_{i=1}^{D}w_{ji}^{(1)}x_{i}\ +\ w_{j0}^{(1)}\ \ (j\ =\ 1,\ \cdots\ M)
}



  • x_i\ (i\ =\ 1,\ \cdots,\ D) : 入力変数
  • D : 入力変数の次元数
  • w_{ji}^{(1)} : 1つ目の層の重みパラメータ
  • M : 1つ目の層のノード数
  • a_j : 活性(と呼ぶようですが、中間出力)

添字 i,\ j を無くして表現すると、以下の式.


\displaystyle{
a_{1}\ =\ w_{10}^{(1)}\ \cdot\ 1\ +\ w_{11}^{(1)}\ x_{1}\ +\ \cdots\ +\ w_{1D}^{(1)}\ x_{D} \\
\vdots \\
a_{j}\ =\ w_{j0}^{(1)}\ \cdot\ 1\ +\ w_{j1}^{(1)}\ x_{1}\ +\ \cdots\ +\ w_{jD}^{(1)}\ x_{D} \\
\vdots \\
a_{M}\ =\ w_{M0}^{(1)}\ \cdot\ 1\ +\ w_{M1}^{(1)}\ x_{1}\ +\ \cdots\ +\ w_{MD}^{(1)}\ x_{D} \\
}



つまり、D個の入力変数に対してM x (D+1) 個の重みパラメータを利用して、M個の出力をするということになる.

これらを行列の計算式で書き表すこともできる.


\displaystyle{
  \left(
    \begin{array}{c}
      a_{1} \\
      \vdots \\ 
      a_{j} \\
      \vdots \\ 
      a_{M}
    \end{array}
  \right)\ =\ 
  \left(
    \begin{array}{ccc}
      w_{10}^{(1)} & \cdots & w_{1D}^{(1)} \\
      \vdots & \ddots & \vdots \\
      w_{M0}^{(1)} & \cdots & w_{MD}^{(1)}
    \end{array}
  \right)\ \cdot\ 
  \left(
    \begin{array}{c}
      1 \\
      x_{1} \\
      \vdots \\ 
      x_{D}
    \end{array}
  \right)\ \\
}



まとめるとこのようなかんじ.


\displaystyle{
\mathbb{a}\ =\ \mathbb{w}^{(1)}\ \mathbb{x}
}

隠れユニットの計算

次に微分可能な非線形活性化関数 h で活性 a_{j}\ \ (j\ =\ 1,\ \cdots\ M)を変換する.


\displaystyle{
z_{j}\ =\ h(a_{j})\ \ (j\ =\ 1,\ \cdots\ M)
}



z_{j}\ \ (j\ =\ 1,\ \cdots\ M) は基底関数の出力に相当し、ニューラルネットワークでは隠れユニットと呼ばれている.

非線形活性化関数 h には一般に、ロジスティックシグモイド関数tanh関数が使われることが多い.

出力ユニット活性

次に活性 a_j\ \ (j\ =\ 1,\ \cdots\ M) を計算したときと同様、z_j\ \ (j\ =\ 1,\ \cdots\ M) を入力と見立てて、同様の線形和を作る.


\displaystyle{
a_{k}\ =\ \sum_{j=1}^{M}w_{kj}^{(2)}z_{j}\ +\ w_{k0}^{(2)}\ \ (k\ =\ 1,\ \cdots\ K)
}



  • z_j\ (j\ =\ 1,\ \cdots,\ M) : 隠れユニット
  • M : 1つ目の層のノード数
  • w_kj{}^{(2)} : 2つ目の層の重みパラメータ
  • K : 出力の総数
  • a_k : 出力ユニット活性(と呼ぶようですが、中間出力です。)

活性の計算との違いは添字のみ.

出力の計算

最後に出力を計算を行う.

適当な活性化関数 \sigma を用いて、変換する.


\displaystyle{
y_{k}\ =\ \sigma(a_{k})\ \ (k\ =\ 1,\ \cdots\ K)
}



ネットワーク全体の関数

これらの結果をまとめ、ネットワーク全体の関数は


\displaystyle{
y_{k}(\mathbb{x},\ \mathbb{w})\ =\ \sigma 
  \left( 
    \sum_{j=1}^{M}w_{kj}^{(2)}
      h 
       \left(
         \sum_{i=1}^{D}w_{ji}^{(1)}x_{i}\ +\ w_{j0}^{(1)}
       \right)
    \ +\ w_{k0}^{(2)}
  \right)
}



行列式で整形すると


\displaystyle{
\mathbb{y}\ =\ \sigma\ (\ \mathbb{w}^{(2)} \cdot\ h\ (\mathbb{w}^{(1)} \cdot \mathbb{x}\ )\ )
}



全体のネットワークイメージ図再掲する.

image

まとめ

ニューラルネットワークにおけるフィードフォワードネットワーク関数を定式化した.

この関数はネットワーク上の情報の順伝播(forward propagation)と解釈されることが多く、ディープラーニングの基本になる.

参考