Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

手動によるニューラルネットワークの構築

ではいよいよ今まで造ってきた関数を組み合わせてニューラルネットワークを構築していきます。

私たちはニューラルネットワークを自動で構築するフレームワークを実装していくわけですが、最初は手動で組み立て、どのように自動化していくか考えていきます。

はじめにニューラルネットワークの構造を簡単に説明します。深層学習の基本的な原理は全結合層 による線型変換活性化関数 による非線型変換 を互いにパイのように重ね、データを線型変換→非線型変換→線型変換→非線型変換の順番で次々と変換する処理です。

graph LR
 x((Input)) --> A[線型変換]
 A --> B[非線型変換]
 B --> C[線型変換]
 C --> D[非線型変換]
 D --> E[...]

この二つの種類の変換を深い層にし、多く用いることで多様な表現を行う、すなわち複雑な問題にも対応できるようになります。この深い層を深層学習(DeepLearning)と言います。

なぜこの2種類の変換を用いるかというと、それは線型、非線型の2種類のデータに対応できるようになるからです。例えば直線 \(y = ax\) は線型のデータです。一方、 \(y = sinx\) は非線型のデータです。このように多様なデータに対応するために、線型、非線型を組み合わせるのです。

では次に線型変換、非線型変換について説明します。

線型変換は以前に実装した行列の積 を基本とする処理です。MatMul の説明の際にも触れましたが、inputのデータの\(X\)と重みの\(W\) を行列積でとることで、ニューラルネットワークの全結合層を表すことができます。この時の数式は \(Y = X \cdot W + b\) となります。この\(b\) はバイアスと言います。これは先ほどの直線の式 \(y = ax+b\)と似ています。スカラー版の直線の式を行列に拡張したというイメージです。一方非線型変換はシグモイド関数や\(tanhx\) などといった活性化関数に使われます。

機械学習の分野における線型性と非線型性の違いはよく、直線となめらかな曲線で説明されます。線型性のみの場合は、分類において直線による線引きしかできませんが、非線型性を持つと、その線を曲線として表現でき、より複雑な分類を行えるようになります。

次に誤差逆伝播法を実装しますが、説明は後の誤差逆伝播法のページで行います。

ではこれらの線型変換、非線型変換、そして誤差逆伝播法のための関数を簡易的に実装し、手動でニューラルネットワークを構築していきます。