Coursera Wu Enda ニューラル ネットワークとディープ ラーニングのメモ

スパイシーなウーエンダディープラーニングを始めましょう!
Coursera DeepLearning
Netease Cloud クラスルーム ビデオ

このディープ ラーニングには 5 つのコースがあり、最初のコースは 4 週間です。
ここに画像の説明を挿入


ニューラルネットワークとディープラーニング

1週目

水を吹く


2週目

2.1
深層学習の定義についてお話しますが、機械学習では X の各行がデータの集合であるように見えますが、ここでは各列がデータの集合です。
n は特徴の数、m はサンプルの数で、m_train、m_test などが存在します。
ここに画像の説明を挿入
2.2
ここに画像の説明を挿入
よく知られた勾配降下法。ここで J ( w , b ) は w の偏導関数の dw として記述できます。 b の偏導関数にも同じことが当てはまります。
次に、偏導関数 (特定の変数の導関数をとる変数が複数ある) を求めたい場合は、花体の d を使用すると、導関数は d になります。

ここでは、w と b が θ 行列に融合され、w と b が分離され、w が列ベクトル、b が定数となる機械学習とは異なります。 2.11 numpy のドットを使用してドット積を計算します
ここに画像の説明を挿入
(
.dot 2 つのベクトル) と行列の乗算 (.dot 2 つの行列、または 1 つのベクトルと 1 つの行列)、注意: ドット積は行列の乗算とは異なります。ライブラリ関数が呼び出された場合は、ドット積: a.*b、行列の乗算: a*b (そうではありません) for ループで明示的に
使用)、どのような並列演算を行うか、次に SIMD に関連する、この SIMD 演算は CPU よりも GPU の方が得意 (CPU は悪くない)、つまり、ライブラリの調整が効率的になります。手書きよりも簡潔です。
紹介リンクをいくつか貼ります:
np.dot() はメソッド
ベクトルの内積 (ドット積) と外積 (クロス積) の概念と幾何学的な意味を
ここに画像の説明を挿入
使用します。テスト:
ここに画像の説明を挿入
2.12
効率を高めるために、for ループを明示的に使用しないようにしてください。多くの関数を呼び出すことができます。たとえば、exp は、元の行列のすべての要素の結果である行列を e のインデックスとして検索します (おそらく = = ): V** 2 は、次の各要素の 2 乗です
ここに画像の説明を挿入
。行列:
ここに画像の説明を挿入
2.13
ここで b は 1 xm 次元である必要がありますが、行列に定数を追加すると、その要素が各要素に追加されます。これは行列の加算と同等です: 2.15 Python でのブロードキャスト Python 構文をいくつか覚えて
ここに画像の説明を挿入
ください

2.16 Python/numpy ベクトルに関する注意

2.18 ロジスティック回帰コスト関数の説明 (オプション) では、両辺に対数を乗算する最尤推定法を使用した
ロジスティック回帰の導出について説明します:宿題 1 numpy を使用した Python の基礎 (オプション)
ここに画像の説明を挿入

ここに画像の説明を挿入

宿題 2 ニューラル ネットワークの考え方によるロジスティック回帰では、
L(a(i),y(i)) 関数が突然理解されます: (L: 特定のサンプルの誤差、J: 全体の平均誤差) if y (注
) L = -ylog(a) = -log(a) a が
大きいほど、アルゴリズムはそれが 1 であるべきだと考え、log(a) も大きくなり、 L が小さいほど、最終的な統計は J = 1/m sigma(L) です。本来の目的は J を最小化することなので、L が小さいほど優れており、a が大きいほど優れています。y が 0 の場合、それ
はL = -(1-y )log(1-a) = - log(1-a)、a が小さいほど、アルゴリズムはそれが 0 であるべきだと考えます。1-a が大きいほど、log は大きくなります。 (1-a) の場合、L が小さいほど、J が小さいほど、J を最小化するという本来の意図に沿っています。
ここに画像の説明を挿入
合格。遭遇した問題は次のとおりです。

  1. 入力する場所が 3 つある関数がありますが、テストを開始するために 1 つだけ入力してコンパイルしましたが、wT の T が定義されていないと表示されます。? ? , もし隣に誰かがいなかったら、私は叱り始めます。次に、エラーを検索しましたが見つかりませんでした。最後の 2 か所を埋めたところ、コンパイルは成功しました...
  2. そしてここでは、w, b を先頭にinitialize_with_zeros(dim)と書きました。それは偶然で、脳が書いたものではなく、エラーを読んで寸法が間違っていると報告したので、それを X_train.shape[1] に変更しましたが、それでも間違っていることがわかり、次のように変更しました。 [0]。次に、shape[0] は、X.shape が (nx,m) であるためです。 nx はサンプルのセット内の要素の数を指し、m はサンプルの m セットの数を指します。したがって、w は 0 次元です。
    ここに画像の説明を挿入

3週目

3.4 複数のサンプルにわたるベクトル化 括弧
ここに画像の説明を挿入
は最初の層を指し、括弧は最初のサンプル (トレーニング サンプル) を指します。
右下隅の配列 A を例に挙げます。最初の列の 1 行目は (最初のサンプルの) ニューラル ネットワークの最初の層の最初の点であり、最初の列の 2 行目は 2 番目の点です。最初のレイヤーの 2 列目。最初の行は、(2 番目のサンプルの) 最初のレイヤーの最初の点です。
追伸: a 2 [ 1 ] a^{[1]}_{2}ある2[ 1 ]最初の隠れ層の 2 番目の活性化関数 a (つまり、1 列目の円の 2 行目の円) を示します。 3.5
ベクトル化された実装の説明
ここに画像の説明を挿入
ここに画像の説明を挿入
このセクションでは引き続きベクトル化の使用方法について説明します。w[1 ] を参照してください。 x(1)、w[1]x(2)、w[1]x(3) は、実際にはさまざまなサンプルの最初の層の値です: z[1](1)、z[1]( 2 ), z[1](3)... ...計算しやすいようにそれらを一列に並べます。上図では、右上のコードと右下のコードは同じ効果を持ちます。

最後に、隠れ層の最初の層から始まるのは [1] であることに注意してください。そのため、入力層の X 行列も A[0] で表すことができます。Z は入力を参照し、左半分とみなすことができます。これはボールの右半分として見ることができます。1
ここに画像の説明を挿入
つの隠れ層だけでコードを理解した後、複数の隠れ層はそのコードを繰り返すだけです。

3.6 非線形活性化関数が必要な理由
ここに画像の説明を挿入
このセクションの活性化関数では、活性化関数の前にシグモイドを使用します ( a = 1 1 + e − za=\frac{1}{1+e^{-z}}ある=1 + e−z _1) ですが、隠れ層では Tan 関数が使用されます ( a = Tanh ( z ) = ez − e − zez + e − za=tanh(z)=\frac{e^ze^{-z}}{e^ z +e^{-z}}ある=タン・アン( z )=ez +e−z _eze−z _)、バイナリ分類の出力層でない限り、シグモイドを使用しないようにしてください。理由は次のとおりです。

現時点では、関数の値は 1 と -1 の間であるため、隠れ層活性化関数の出力の平均値は 0 に近づきます。学習アルゴリズムをトレーニングするとき、データを中心に置き、Sigmiod 関数の代わりに Tanh を使用する場合があります。データセンタリングの効果を実感データセンタリングによりデータの平均値がゼロに近づく

Wu Enda の元の言葉は...おそらくこれを意味します。
次に、よく使用される ReLU 関数があります ( a = max ( 0 , z ) a=max(0,z)ある=m a x ( 0 ,z ) )、リーキー ReLU があります (リーキー ReLU では、a = max ( 0.01 z , z ) a=max(0.01z,z)ある=max x ( 0 . 0 1 z , _z ) )、経験上 0.01z を使用する人は比較的少なく、通常は ReLU を使用します。

このレッスンでは、人気のある関数と不人気な関数の選択について学びました。独自のトピック/目標に応じて選択する必要があります。クロスデータ セットでさらに実行して、どちらが優れているかを確認できます。

3.7 非線形活性化関数が必要な理由は何ですか?
活性化関数は、ニューラル ネットワークがいくつかの興味深い機能を達成できるようにするために確立されています。
ここに画像の説明を挿入
活性化関数がない場合(線形活性化関数( g ( z ) = zg(z)=zを除く)g ( z )=z )) の場合、それは右側の a と同じであり、線形スタッキング、さらに線形でありますが、実際的な意味はありません。そのため、非線形活性化関数が必要です。使用する必要がある唯一の線形活性化関数 (g ( z ) = zg(z)=zg ( z )=z ) は、回帰問題の最後の層の出力です (ここでは ReLU も使用できます)。

3.8 活性化関数の導関数では
、活性化関数の導関数を紹介します。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
3.9 ニューラル ネットワークの勾配降下法では、
勾配降下法を実行する方法を紹介します (導出は次のセクションで説明します)
ここに画像の説明を挿入
3.10 バックプロパゲーションの直観 (オプション)
ここに画像の説明を挿入
は、連鎖則を使用して導出されます。損失関数は次のとおりです。クロスエントロピー関数:
da = d L ( a , y ) da da = \frac{dL(a,y)}{da}だあ_=だあ_d L ( a , y ), 具体的な導出方法は、
dz = d L da ⋅dadz = da ⋅ σ ′ ( z ) dz = \frac{dL}{da}·\frac{da}{dz}=da·σ& #x27 があります。 ;(z)dz _=だあ_dL _dz _だあ_=だぁ_p (z)、ここではシグモイド関数が使用されています (hh は以前は使用されなくなりました)
= da ⋅ σ ( z ) ⋅ ( 1 − σ ( z ) ) = da ⋅ a ⋅ ( 1 − a ) = a − y = da・σ(z)・(1-σ(z)) = da・a・(1-a)= a - y=だぁ_σ ( z ) ( 1σ ( z ) _=だぁ__( 1_=あるy
dw = d L dz ⋅ dzdw = dz ⋅ x dw = \frac{dL}{dz} \frac{dz}{dw} = dz x=dz _dL _ディーズ_=dz⋅ _ _x
db = d L dz ⋅ dzdb = dz db = \frac{dL}{dz}·\frac{dz}{db} = dzdb _=dz _dL _db _ディーズ_=以下のd z
は、2 つの隠れ層の式の導出です。
ここに画像の説明を挿入
2 つの隠れ層の順伝播の場合 (左が式の導出、右がコード)
ここに画像の説明を挿入
逆伝播の場合: (m が削除されることに注意してください。 m 個のグループです)
ここに画像の説明を挿入
最後の点の掛け算 なぜドット積なのかよくわかりませんが、ng さんは次元に依存すると言いました、同じ次元の 2 つのものを掛けるのでドット積になります。(え?????) 後で考えてみると、これは数学的な意味が含まれているはずですが、次元によってすぐに区別できます(数式が正しくリストされている場合)

3.11 ランダムな初期化w [ 1 ] w^{[1]}
とするとw[ 1 ]すべて 0 に初期化され、最初の列の円 (隠れユニット) はすべて、反復回数に関係なく同じことを計算します。ただし、異なる関数を計算するために異なる隠れユニットを設定します。
ここに画像の説明を挿入
解決策は、配列をランダム化し、100 の代わりに 0.01 を採用することです。これは、活性化関数が Tanh または Sigmoid の場合、導関数が小さくなり、後続の勾配降下に役立ちません。
ここに画像の説明を挿入


第4週

4.1 ディープ L 層ニューラル ネットワークは
、深層学習ネットワークの構築を開始しました。通常、多くの層がディープと呼ばれ、層は隠れ層 + 出力層の数になります。ここでいくつかの記号の仕様を示します: L は層を
ここに画像の説明を挿入
指し
ます、 nln^{l}n私はll番目です層lのノードの数ala^{l}ある私はll番目ですl層の活性化関数、つまりg [ l ] ( z [ l ] ) g^{[l]}(z^{[l]})g[ l ] (z[ l ] )、つまり[ 0 ] a^{[0]}ある[ 0 ]はXXですXa [ L ] a^{[L]}ある[ L ]それはヤハットヤハットですY h a t、予測出力、W [ l ] W^{[l]}W[ l ]はll 番目ですLWWWb [ l ] b^{[l]}b[ l ]はll 番目ですbbのlb
ここに画像の説明を挿入
4.2 ディープネットワークのフォワードパス式におけるフォワードプロパゲーション
何も違いはありません。注意すべき唯一のことは、ll を4.3行列の
ここに画像の説明を挿入
次元を正しくする
このセクションでは、行列の次元を正しくする方法について説明します。

  • W 行列では、Z = WX + b であるため、W の行数は Z の行数、列数は X の行数になります。この場合、dW db は W および b と同じサイズになります
    。それぞれ
  • Z、A、X には m 個のサンプルがあるため、列の数を 1 から m に変更する必要があることに注意してください (1 サンプルの文字は z、a、x です)。ディープ
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    ラーニング
    / なぜニューラル ネットワークにさらに多くの隠れ層を使用するのでしょうか?
    ここでの説明は、顔認識を例に挙げると、最初のレイヤーはエッジや比較的単純で粗い特徴を検出するために使用され、次のレイヤーはいくつかの顔の特徴を検出し、そして 3 番目のレイヤーは顔であるということです。

    大まかな特徴から始めて、段階的に洗練していくのは脳の働きだと感じる人もいます。以前、脳の思考はニューラル ネットワークをモデルにしているという意見をいくつか読みましたが、人間の体にはバックプロパゲーションがありません。つまり、脳はバックプロパゲーションを使用しなくても、ニューラル ネットワークの効果が得られるということです。

ここに画像の説明を挿入
もう一つの説明は回路理論です。n 個の XOR がある場合、深い層では、ツリーを構築し、ログ時間を使用してそれを完了します。隠れ層などの浅い層の場合、2^(n-1) 個の点が必要です (-1 は、n 個の数値を接続するための n-1 個の円 (XOR) があるためです)。そのため、浅い層に必要な時間は指数関数的に増加します。 。
ここに画像の説明を挿入
最後に、実際には、最初の問題を解決するときは、ロジスティック回帰から始めて、効果が不十分な場合は段階的に層の数を増やすことをお勧めします。特定の問題のみに多くのレイヤーが必要です。

4.5 ディープ ニューラル ネットワークの構成要素
以下では、ディープ ニューラル ネットワークの構築方法を説明します:
順方向と逆方向のパラメーターが左側にあり、一般的なプロセスが右側にあります。青 (水平) の矢印は順方向のプロセスを示し、赤い逆矢印は逆方向のプロセスを示します
ここに画像の説明を挿入
。詳細なニューラル ネットワークの順方向および逆方向のプロセス、緑は最初から最後までのプロセスを示し、青は順方向、赤は逆方向、順方向中にキャッシュが記録されることに注意してください。キャッシュはバックワード時に便利に使用できます。da[0] は計算す​​る必要がないことに注意してください。
ここに画像の説明を挿入
4.6 順方向伝播と逆方向伝播
このセクションでは前のセクションの内容を継続し、bp 式に焦点を当てます。ここでda [ l − 1 ] da^{[l-1]}だあ_[ l 1 ]取得方法がわかりません。(理解できない人は 3.10 以下に戻ってください)z [ l ] = w [ l ] a [ l − 1 ] + b [ l ] z^{[l]}=w があるので
理解しました。^{ [l]}a^{[l-1]}+b^{[l]}z[ l ]=w[ l ] _[ l 1 ]+b[ l ]、つまりd L da [ l − 1 ] = d L dzl ⋅ dzlda [ l − 1 ] = dzl ⋅ w [ l ] \frac{dL}{da^{[l-1]}}=\frac {dL}{dz^l}\frac{dz^l}{da^{[l-1]}}=dz^{l} w^{[l]}だあ_[ l 1 ]dL _=dz _dL _だあ_[ l 1 ]dz _=dz _lw[ l ]
最後の行はda [ l − 1 ] da^{[l-1]}だあ_[ l 1 ]最初の行に置換します:
ここに画像の説明を挿入
thisda [ l − 1 ] da^{[l-1]}だあ_[ l 1 ]代入dz [ l ] dz^{[l]}dz _[ l ]を使用して緑色の式を取得します。これは、次の 3.10 [ 1 ] dz^{[1]} の単一隠れ層のニューラル ネットワークの dzdz _[ 1 ]式:
ここに画像の説明を挿入
概要: (この図も同様) データのセットが m 個あるため、文字を大文字にすることを忘れないでください。
ここに画像の説明を挿入

最後にもう 1 つ強調したいのは、これらの式が少し抽象的で理解しにくいと思われる場合は、下調べを注意深く行うことをお勧めします。機械学習アルゴリズムの場合、自分の機械学習アルゴリズムが機能することが証明されていることにも驚かれることがあります。機械学習の複雑さはコード行ではなくデータに由来するため、コード行を書いているように感じることがありますが、実際には機能していないからです。彼らが何をしているのかよくわかりませんが、最終的には魔法のような結果を生み出すことになります。なぜなら、魔法のほとんどは、実際に書くコードの数行には含まれていないからです。実際にはそれほど短くないかもしれませんが、数千行にはならないでしょう。長年にわたって機械学習を行っているにもかかわらず、たまたま大量のデータを入力するコードがあり、アルゴリズムの複雑さはデータに由来するものであり、必ずしも数千のデータに基づくものではないため、機械学習アルゴリズムが機能することに今でも驚くことがあります。あなたが書いたコードの行数

通常、ニューラル ネットワークのコードはそれほど長くありませんが、「機能」することができます。その理由は必ずしもコードにあるわけではなく、量的変化から質的変化までの大量のデータによるものです。

最後に、もう一度整理してみます。まずda [ l ] da^{[l]}を取得します。だあ_[ l ] (交差エントロピーの場合は− ya + 1 − y 1 − a \frac{-y}{a}+\frac{1-y}{1-a}ある y+1 a1 y)、次にdz [ l ] 、 dw [ l ] 、 db [ l ] dz^{[l]}、dw^{[l]}、db^{[l]}dz _[ l ]dw_[ l ]db[ l ]、次にdz [ l ] dz^{[l]}dz _[ l ]は da [ l − 1 ] da^{[l-1]} を生成しますだあ_[ l 1 ]なので、dz [ l − 1 ] 、 dw [ l − 1 ] 、 db [ l − 1 ] dz^{[l-1]}、 dw^{[l- 1]}、 db となります。 ^{[l-1]}dz _[ l 1 ]dw[ l 1 ]db[ l 1 ] ……
(3.10 の図:)
図3.10
4.7 パラメータとハイパーパラメータ
パラメータとハイパーパラメータ:
ハイパーパラメータとは何ですか? ハイパーパラメータは、反復回数 iter、学習率 α、隠れ層の数 L、隠れ層の隠れユニットの数、活性化関数の選択など、最終的に wlw^ に影響を与えるパラメータを制御できるパラメータです。wlblb^lbl、および将来の運動量 (? 運動量)、ミニバッチ サイズ、正則化パラメーターなど。

ハイパーパラメータの選択: 満足のいく α を選択したことを確認して、継続的に変更するには、左側の円を通過する必要があります (右側の図など)。新しいプロジェクトを開始するときは、この方法を使用して、 CPU、GPU、ネットワーク、データベースは常に更新されているため、最適なハイパーパラメータは変化するため、馴染みのあるプロジェクトの場合は、時々チェックする必要があります: 次に、ディープ ラーニングの不満足な側面の 1 つについて言及します
ここに画像の説明を挿入
。 : 常に異なるハイパーパラメータの値を試す必要があります (その後、予約された相互検証セットまたは他のセットで評価し、最適なソリューションを選択します)。2 番目のレッスンでは、ハイパーパラメーター空間を系統的に探索する方法についていくつかのアドバイスを提供します。

4.8 これは脳と何の関係がありますか?
ディープラーニングと脳の類似点は何ですか? 答え: 関係ありません。

ディープラーニングと脳の類似点は何ですか? 私は両者の類似性は高くないと結論付けています。まず、人々がディープ ラーニングを人間の脳と比較する傾向がある理由を見てみましょう。ニューラル ネットワーク システムを構築するときは、順伝播と逆伝播を使用します。これらの複雑な方程式が理想的な結果を達成できる理由を直感的に説明するには、ディープ ラーニングと人間の脳との類似により、このプロセスが過度に単純化されますが、説明は簡単になります。この説明の単純さにより、一般の人々がさまざまな情報を利用しやすくなります。メディアは次のように述べています。それについて使用または報告し、確かに大衆の想像力を刺激します。実際、ロジスティック回帰単位やシグモイド活性化関数など、これにはいくつかの類似点があります。これがこのバイオの脳ニューロンの画像です。感覚におけるニューロンの画像では、このニューロンは実際には脳内の細胞であり、ニューロン x1、x2、x3、または他のニューロン a1、a2、などの他のニューロンから電流信号を受け取ります。

コース1終了!

おすすめ

転載: blog.csdn.net/Only_Wolfy/article/details/90734080