目次
3、ニューラルネットワーク
問題の解決:前の章では、ANDまたはnonを使用してさまざまな関数の問題を解決できますが、重みは手動で設定されます。この章では、ニューラルネットワークの実現から始め、既存のデータを使用して適切な重みをパラメーターとして学習し、上記の問題を解決します。
3.1パーセプトロンからニューラルネットワークへ
3.1.1ニューラルネットワークの例:
ニューラルネットワークは実際にはパーセプトロンと同じです
3.1.2関数変換:
参考:同級生Fangが編集した数式図
上図の関数変換によれば、活性化関数であるh(x)に変換できます。
活性化関数は、パーセプトロンとニューラルネットワーク間のブリッジです。
3.2アクティベーション機能
3.2.1アクティベーション機能タイプ:
境界としてのしきい値へのアクティブ化機能は、入力がしきい値を超えると、出力が切り替わります。このような関数を「ステップ関数」と呼びます。
活性化関数は、ステップ関数とシグモイド関数に分かれており、ステップ関数は、入力値が特定のしきい値を超えたときに出力を変更するものです。
ここで、EXP(-x)手段、H(x)は、共通の用語分類の損失関数であります
コード:
3.2.3クラス関数のグラフ
ステップ機能と画像実現:
シグモイド関数の画像:
3.2.2ステップ関数とシグモイド関数の比較:
ステップ関数 | シグモイド関数 |
---|---|
滑らかでない | スムーズ |
2つの値のみ(バイナリ値) | 無制限の本当の価値 |
彼らは2間の類似点は、彼らがいることである0-1との間の範囲内にあります
ニューラルネットワークの活性化関数は、非線形関数を使用する必要があります。
さらに、シグモイドは、線形関数(直線)h(x)= cx(cは定数)とは異なり、非線形曲線です。これは、線形関数が多層パーセプトロンに次のような隠れ層を持たないためです。
同じことはy = axであり、複数の層を利用することはできません。
3.2.3ReLU機能:
0より大きい場合はxを直接出力し、0以下の場合は0を出力します
関数の実装:ここで、maxinumは最大値を返します
図に効果を示します。
3.3多次元配列の操作:
np.ndim(A)出力行列の次元
np.shapeの出力形状にはいくつかのコンポーネントがあります。結果はタプルです。
3.3.1ニューラルネットワークの内積:
np.dot(多次元配列のドット積)を使用し、行列演算のみ
3.4。3層ニューラルネットワークの実装
記号の意味:
原理分析:
1)0番目から1番目のレイヤーを実現します。
私たちは知っています
したがって、重み付けの最初のレベルがあります。
コード:
2)以下の図のアクティベーション関数h()の a1からz1への変換(シグモイド関数)を実現します。
コード:
3)1番目から2番目のレイヤーと同じように、上記の手順を直接繰り返します。
コード:
4)2番目から3番目のレイヤー(出力レイヤー)は基本的に上記の手順と同じですが、アクティベーション機能が異なります。
5)全体的なコード実装:
注:一般に、アイデンティティ関数は回帰問題に使用でき、シグモイド関数はバイナリ分類問題に使用でき、ソフトマックス関数は多変量分類問題に使用できます。3.5出力層の設計:
3.5.1 3種類の出力関数
1)恒等関数:そのまま直接出力され、回帰問題で使用されます
2)シグモイド関数:、バイナリ分類問題で使用されます。
3)Softmax関数:、複数の分類問題で使用されます。
それらの中で、softmax関数は、図に示すように、入力信号が各出力間で影響を受けることを意味します。
コード:
3.5.2 softmax関数のオーバーフロー問題
xが大きいとe ^ xが爆発し、オーバーフローが発生することは誰もが知っているため、改善する必要があります。
3.5.3 Softmax関数の特性:
出力yが0〜1であり、それらの合計が1であることがわかります。したがって、出力yを確率問題に変えることができます。つまり、出力が大きいほど、確率が高くなります。上の図から、 y [2]が最大であることから、答えは2番目のカテゴリであることがわかります。さらに、e ^ xは単調増加関数であるため、上記の例では、要素のサイズとyのサイズの関係は変化せず、y [2]が最大です。したがって、実際には、softmax関数はまったく必要ありません。また、a要素を見れば、どの確率が最大であるかを知ることができます(softmaxは指数演算を必要とするため、計算量は非常に大きくなります)。
3.5.4出力層のニューロンの数
上図からわかるように、出力ニューロンの数はカテゴリの数によって決まり、出力結果が0〜9の10のカテゴリである場合、ニューロンの出力は10です。
3.6手書き数字認識
次に、実際のアプリケーション、つまり手書き数字認識の古典的な例でアルゴリズムを使用します
コードのコメントは以下のとおりですので、個別に説明することはしません。
load_mnist関数は、読み取ったMNISTデータを「(トレーニングイメージ、トレーニングラベル)、(テストイメージ、テストラベル)」の形式で返します。
ディスプレイ番号
ニューラルネットワーク出力
単一処理とバッチ処理
上記の例から、入力層には784個のニューロン(28 * 28)があり、出力層には10個のニューロンがあることがわかります。非表示層の1-2層に50と100のニューロンがあると仮定すると、次のコード処理があります。 :
1)単一処理:
上記の関数の知識を使用して、トレーニング後に画像とラベル間の正確さを正式に判断できます。
2)バッチ処理:
上記の例(上記)から、1つの画像の入力(1 * 28 * 28)と出力(10のカテゴリの確率)の後の行列の形状がわかります。
以下では、上記の例を計算のために一度に100個の画像にパックします。
バッチ処理の利点:画像を計算するたびに、io は一度に1枚の画像しか撮りません。今度は、計算に一度に100 ioを使用します。計算速度はioの速度よりも速いため、バッチ処理は全体的な計算で変化しますもっと早く
コード:
概要:
前の章のように、特定の重みを見つけ、各レイヤーの関数を介して出力する方法を考慮しないため、単純なニューラルネットワークが形成されます。
上記のパラメータについては後で説明します