はじめに#
以前、李沐らの『動手学深度学习』を読んで、良いと思いました。しかし、まとめや実践を重視せず、これほど質の高い学習資料に対して申し訳なく感じました。そこで、この文章を書き、学習の過程をまとめ、必要な人に役立てばと思います。
分量の都合上、理論部分のみの要約です。
問題の解答は https://datawhalechina.github.io/d2l-ai-solutions-manual/#/ を参照してください。
線形回帰#
モデル y ^ = w ⊤ x + b . \hat{y} = \mathbf{w}^\top \mathbf{x} + b. y ^ = w ⊤ x + b . ここで w ∈ R d \mathbf{w} \in \mathbb{R}^d w ∈ R d 、x ∈ R d \mathbf{x} \in \mathbb{R}^d x ∈ R d は単一データサンプルの特徴です。
特徴集合 X \mathbf{X} X に対して、y ^ = X w + b {\hat{\mathbf{y}}} = \mathbf{X} \mathbf{w} + b y ^ = Xw + b が予測ベクトルを与えます。
損失関数は平方誤差関数を採用します。
Copy l ( i ) ( w , b ) = 1 2 ( y ^ ( i ) − y ( i ) ) 2 . l^{(i)}(\mathbf{w}, b) = \frac{1}{2} \left(\hat{y}^{(i)} - y^{(i)}\right)^2. l ( i ) ( w , b ) = 2 1 ( y ^ ( i ) − y ( i ) ) 2 .
合計してサンプル数で平均を取ると、
Copy L ( w , b ) = 1 n ∑ i = 1 n l ( i ) ( w , b ) = 1 n ∑ i = 1 n 1 2 ( w ⊤ x ( i ) + b − y ( i ) ) 2 . L(\mathbf{w}, b) =\frac{1}{n}\sum_{i=1}^n l^{(i)}(\mathbf{w}, b) =\frac{1}{n} \sum_{i=1}^n \frac{1}{2}\left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right)^2. L ( w , b ) = n 1 i = 1 ∑ n l ( i ) ( w , b ) = n 1 i = 1 ∑ n 2 1 ( w ⊤ x ( i ) + b − y ( i ) ) 2 .
したがって、w ∗ , b ∗ = argmin w , b L ( w , b ) \mathbf{w}^*, b^* = \operatorname*{argmin}_{\mathbf{w}, b}\ L(\mathbf{w}, b) w ∗ , b ∗ = argmin w , b L ( w , b ) を見つけたいと考え、解析解は ∥ y − X w ∥ 2 \|\mathbf{y} - \mathbf{X}\mathbf{w}\|^2 ∥ y − Xw ∥ 2 を最小化するもので、w \mathbf{w} w に対する導関数が 0 になると、得られます。
Copy w ∗ = ( X ⊤ X ) − 1 X ⊤ y . \mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}. w ∗ = ( X ⊤ X ) − 1 X ⊤ y .
SGD#
より一般的な問題に対して、gradient descent を採用し、原理は勾配が減少する方向に更新することです。実際のアプリケーションでは計算量を考慮して、小さなバッチサンプルをランダムに抽出し、minibatch stochastic gradient descent と呼ばれます。その更新プロセスは以下の通りです:
Copy w ← w − η ∣ B ∣ ∑ i ∈ B ∂ w l ( i ) ( w , b ) , b ← b − η ∣ B ∣ ∑ i ∈ B ∂ b l ( i ) ( w , b ) . \begin{aligned}
\mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_{\mathbf{w}} l^{(i)}(\mathbf{w}, b),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \partial_b l^{(i)}(\mathbf{w}, b) .
\end{aligned} w b ← w − ∣ B ∣ η i ∈ B ∑ ∂ w l ( i ) ( w , b ) , ← b − ∣ B ∣ η i ∈ B ∑ ∂ b l ( i ) ( w , b ) .
上記の線形モデルにおいて、具体的には次のようになります。
Copy w ← w − η ∣ B ∣ ∑ i ∈ B x ( i ) ( w ⊤ x ( i ) + b − y ( i ) ) , b ← b − η ∣ B ∣ ∑ i ∈ B ( w ⊤ x ( i ) + b − y ( i ) ) . \begin{aligned}
\mathbf{w} &\leftarrow \mathbf{w} - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \mathbf{x}^{(i)} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right),\\ b &\leftarrow b - \frac{\eta}{|\mathcal{B}|} \sum_{i \in \mathcal{B}} \left(\mathbf{w}^\top \mathbf{x}^{(i)} + b - y^{(i)}\right).
\end{aligned} w b ← w − ∣ B ∣ η i ∈ B ∑ x ( i ) ( w ⊤ x ( i ) + b − y ( i ) ) , ← b − ∣ B ∣ η i ∈ B ∑ ( w ⊤ x ( i ) + b − y ( i ) ) .
最小化平均二乗誤差の妥当性#
ノイズがガウスノイズである場合、平均二乗誤差の最小化は線形モデルの最大尤度推定に等しいです。したがって、平均二乗誤差の最小化は妥当です。以下のように証明します:
y = w ⊤ x + b + ϵ , y = \mathbf{w}^\top \mathbf{x} + b + \epsilon, y = w ⊤ x + b + ϵ , ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim \mathcal{N}(0, \sigma^2) ϵ ∼ N ( 0 , σ 2 ) のとき、
Copy P ( y ∣ x ) = 1 2 π σ 2 exp ( − 1 2 σ 2 ( y − w ⊤ x − b ) 2 ) . P ( y ∣ X ) = ∏ i = 1 n p ( y ( i ) ∣ x ( i ) ) . \begin{aligned}
P(y \mid \mathbf{x}) &= \frac{1}{\sqrt{2 \pi \sigma^2}} \exp\left(-\frac{1}{2 \sigma^2} (y - \mathbf{w}^\top \mathbf{x} - b)^2\right).\\
P(\mathbf y \mid \mathbf X) &= \prod_{i=1}^{n} p(y^{(i)}|\,\mathbf{x}^{(i)}).
\end{aligned} P ( y ∣ x ) P ( y ∣ X ) = 2 π σ 2 1 exp ( − 2 σ 2 1 ( y − w ⊤ x − b ) 2 ) . = i = 1 ∏ n p ( y ( i ) ∣ x ( i ) ) .
これを代入すると、
Copy argmin { − log P ( y ∣ X ) } = argmin { ∑ i = 1 n 1 2 log ( 2 π σ 2 ) + 1 2 σ 2 ( y ( i ) − w ⊤ x ( i ) − b ) 2 } . \begin{aligned}
&\text{argmin}\,\{-\log P(\mathbf y \mid \mathbf X)\} \\= &\text{argmin}\,\{\sum_{i=1}^n \frac{1}{2} \log(2 \pi \sigma^2) + \frac{1}{2 \sigma^2} \left(y^{(i)} - \mathbf{w}^\top \mathbf{x}^{(i)} - b\right)^2\}.
\end{aligned} = argmin { − log P ( y ∣ X )} argmin { i = 1 ∑ n 2 1 log ( 2 π σ 2 ) + 2 σ 2 1 ( y ( i ) − w ⊤ x ( i ) − b ) 2 } .
第一項は定数で、第二項の定数係数は無視できます。したがって、ノイズがガウスノイズである場合、平均二乗誤差の最小化は線形モデルの最大尤度推定に等しいことがわかります。
分類問題 - 導入#
主に分類問題を解決するために使用されます。
まず、分類問題の出力のエンコーディングには、one-hot encoding を採用します。例えば:フリリアン、シュタールク、フェレンの場合、フリリアンを ( 1 , 0 , 0 ) (1,0,0) ( 1 , 0 , 0 ) でエンコードし、シュタールクを ( 0 , 1 , 0 ) (0,1,0) ( 0 , 1 , 0 ) でエンコードし、フェレンを ( 0 , 0 , 1 ) (0,0,1) ( 0 , 0 , 1 ) でエンコードします。
1、2、3 などの自然数でエンコードしない理由は、自然数は線形であり、分類問題においてその線形性は自然に存在しないからです(例えば、フリリアンがフェレンやシュタールクに比べてより似ているとは言えず、自然数でエンコードするとある程度それを暗示してしまいます)。
次に、分類問題のネットワーク構造は、線形モデルに似た単層ネットワークを採用しますが、分類問題の出力層はベクトル(実数ではなく)です。これを(未正規化の)予測 logit と呼びます。
単一データの場合、行列の積の形式は o = W x + b \mathbf{o} = \mathbf{W} \mathbf{x} + \mathbf{b} o = Wx + b です。ここで W \mathbf{W} W と b \mathbf{b} b は学習すべきパラメータです。
例えば、4 特徴 3 分類の問題に対して、x \mathbf{x} x は 4-1 行列、W \mathbf{W} W は 3-4 行列、b \mathbf{b} b と o \mathbf{o} o はどちらも 3-1 行列です。
全結合層のコストが非常に高いことがわかります。ある記事ではコストを節約する方法(「その他」)を指摘しています。
分類問題 - softmax 回帰#
すでに出力 o \mathbf{o} o が得られていますが、o \mathbf{o} o は確率公理の定義を満たさないため、いわゆる softmax 操作を通じて正規化とキャリブレーションを行います。
Copy y ^ = s o f t m a x ( o ) y ^ j = exp ( o j ) ∑ k exp ( o k ) \begin{aligned}
\hat{\mathbf{y}} &= \mathrm{softmax}(\mathbf{o})\\
\hat{y}_j &= \frac{\exp(o_j)}{\sum_k \exp(o_k)}
\end{aligned} y ^ y ^ j = softmax ( o ) = ∑ k exp ( o k ) exp ( o j )
このようにして得られた y ^ \hat{\mathbf{y}} y ^ は「確率予測出力」として扱うことができます。定義式から softmax 操作は大きさの順序を保持することがわかるため、最大の o j o_j o j を直接見つけることで最も可能性の高いクラスを特定できます。
softmax は線形モデル linear model と呼ばれます。なぜなら、そのパラメータ部分が線形部分に集中しているからです。これは非常に理解しやすいです。
実際の GPU 計算では、ベクトル化と呼ばれる計算方法が採用されます。
Copy X ∈ R n × d W ∈ R d × q b ∈ R 1 × q i O ∈ R n × q Y ∈ R n × q O = X W + b Y ^ = softmax ( O ) \begin{aligned}
&\mathbf{X}\in \mathbb{R}^{n\times d}\quad\mathbf{W}\in \mathbb{R}^{d\times q}\quad \mathbf{b}\in \mathbb{R}^{1\times q}i\\& \mathbf{O}\in \mathbb{R}^{n\times q}\quad \mathbf{Y}\in \mathbb{R}^{n\times q}\\\\
&\mathbf{O}=\mathbf{X}\mathbf{W}+\mathbf{b}\\
&\hat{\mathbf{Y}}=\text{softmax}(\mathbf{O})
\end{aligned} X ∈ R n × d W ∈ R d × q b ∈ R 1 × q i O ∈ R n × q Y ∈ R n × q O = XW + b Y ^ = softmax ( O )
小バッチのベクトル化は X \mathbf{X} X と W \mathbf{W} W の行列 - ベクトル積を加速します。
同様に対数尤度法を採用し、負の対数尤度を最小化します。異なる点は損失関数が
Copy l ( y , y ^ ) = − ∑ j = 1 q y j log y ^ j . l(\mathbf{y}, \hat{\mathbf{y}}) = - \sum_{j=1}^q y_j \log \hat{y}_j. l ( y , y ^ ) = − j = 1 ∑ q y j log y ^ j .
と呼ばれ、交差エントロピー損失 cross-entropy loss として、分類問題で一般的に使用される損失関数の一つです。
分布 P P P のエントロピー entropy H [ P ] = ∑ j − P ( j ) log P ( j ) H[P] = \sum_j - P(j) \log P(j) H [ P ] = ∑ j − P ( j ) log P ( j ) 、情報理論の基本定理の一つは、分布 P P P からランダムに抽出したデータ をエンコードするためには、少なくとも H [ P ] H[P] H [ P ] ナット nat を必要とすることを示しています。
次のデータを簡単に予測できる場合、そのデータは簡単に圧縮できます。すべてのイベントを完全に予測できない場合、時には「驚き」を感じることがあります。交差エントロピーを「主観的確率 が Q Q Q の観測者が確率 P P P に基づいて生成されたデータ を見たときの期待される驚き」と考えることができます。
P = Q P=Q P = Q のとき、交差エントロピーは最小になります。この場合、P P P から Q Q Q への交差エントロピーは H ( P , P ) = H ( P ) H(P, P)= H(P) H ( P , P ) = H ( P ) です。
softmax の導関数#
Copy l ( y , y ^ ) = − ∑ j = 1 q y j log exp ( o j ) ∑ k = 1 q exp ( o k ) = ∑ j = 1 q y j log ∑ k = 1 q exp ( o k ) − ∑ j = 1 q y j o j = log ∑ k = 1 q exp ( o k ) − ∑ j = 1 q y j o j . \begin{aligned}
l(\mathbf{y}, \hat{\mathbf{y}}) &= - \sum_{j=1}^q y_j \log \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} \\
&= \sum_{j=1}^q y_j \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j\\
&= \log \sum_{k=1}^q \exp(o_k) - \sum_{j=1}^q y_j o_j.
\end{aligned} l ( y , y ^ ) = − j = 1 ∑ q y j log ∑ k = 1 q exp ( o k ) exp ( o j ) = j = 1 ∑ q y j log k = 1 ∑ q exp ( o k ) − j = 1 ∑ q y j o j = log k = 1 ∑ q exp ( o k ) − j = 1 ∑ q y j o j .
Copy ∂ o j l ( y , y ^ ) = exp ( o j ) ∑ k = 1 q exp ( o k ) − y j = s o f t m a x ( o ) j − y j . \partial_{o_j} l(\mathbf{y}, \hat{\mathbf{y}}) = \frac{\exp(o_j)}{\sum_{k=1}^q \exp(o_k)} - y_j = \mathrm{softmax}(\mathbf{o})_j - y_j. ∂ o j l ( y , y ^ ) = ∑ k = 1 q exp ( o k ) exp ( o j ) − y j = softmax ( o ) j − y j .
その他#
層の概念紹介
入力次元(入力数) feature dimensionality は d、出力次元は 1 です。モデルの重点は計算が行われる場所にあるため、計算層数を考えるときは通常出力層を考慮し、入力層は考慮しません。線形回帰モデルは、単一の人工ニューロンから構成される神経ネットワーク、または単層神経ネットワークと見なすことができます。
線形回帰の場合、各入力は各出力と接続されており、これを全結合層 fully-connected layer または密結合層 dense layer と呼びます。
一部の生物学的基礎は非常に興味深いですが、省略します。発見した面白い英単語を抜粋します。
樹状突起(dendrites 、入力端末)
細胞核(nucleus 、CPU)
軸索(axon 、出力線)
軸索終端(axon terminal 、出力端子)
シナプス(synapse )
全結合層のコストを節約する方法に関する記事に言及し、時間があるときに見て、ブログを更新します x
https://openreview.net/pdf?id=rcQdycl0zyk
BEYOND FULLY-CONNECTED LAYERS WITH QUATERNIONS: PARAMETERIZATION OF HYPERCOMPLEX MULTIPLICATIONS WITH 1/n PARAMETERS
社会科学者ダンカン・ルースは 1959 年に選択モデル(choice model)の理論に基づいて softmax 関数を発明しました。
問題の要約#
いつ(解析解を使用することが)ランダム勾配降下法を使用するよりも良い可能性がありますか?この方法はいつ失敗しますか?
答え:データセットが小さい場合、解析解はランダム勾配降下法よりも良い可能性があります。しかし、大規模データセットでは、解析解の計算が非常に時間がかかる場合や、複数の局所最小値が存在する場合があります。また、行列 X ⊤ X \mathbf X^\top \mathbf X X ⊤ X が逆行列でない場合、解析解は存在しません。この場合、正則化や数値最適化手法を使用する必要があります。(注:w ∗ = ( X ⊤ X ) − 1 X ⊤ y . \mathbf{w}^* = (\mathbf X^\top \mathbf X)^{-1}\mathbf X^\top \mathbf{y}. w ∗ = ( X ⊤ X ) − 1 X ⊤ y . )
追加ノイズ ϵ \epsilon ϵ を制御するノイズモデルが指数分布であると仮定すると、p ( ϵ ) = 1 2 exp ( − ∣ ϵ ∣ ) p(\epsilon) = \frac{1}{2} \exp(-|\epsilon|) p ( ϵ ) = 2 1 exp ( − ∣ ϵ ∣ ) の場合、モデル − log P ( y ∣ X ) -\log P(\mathbf y \mid \mathbf X) − log P ( y ∣ X ) の下での負の対数尤度の解析解は存在せず、SGD では駐点近くで勾配が滑らかにゼロに近づくことはなく、突発的な変化が存在します。
解決策は
滑らかな損失関数を使用すること、MSE や Smooth L1 損失関数などを使用できます。
学習率を調整し、学習率を徐々に減少させて、駐点近くのパラメータ更新をより安定させること。
モメンタム法や適応学習率最適化アルゴリズムを使用すること。
重みをゼロで初期化するとどうなりますか?アルゴリズムは依然として有効ですか?
重みをゼロで初期化すると、各ニューロンの出力は同じになります。これは、各ニューロンが学習するパラメータも同じであることを意味します。(なぜ?)したがって、各ニューロンは同じパラメータを更新し、最終的にすべてのニューロンが同じ特徴を学習することになります。したがって、重みをゼロで初期化するとアルゴリズムが失敗します。これにより、異なる特徴を学習する能力という神経ネットワークの利点が失われます。
ロジスティック回帰と神経ネットワークには異なる重み初期化方法があります。ロジスティック回帰では、重みをゼロで初期化できます。これは線形モデルであり、勾配降下法はそれらを更新できます。しかし、神経ネットワークの場合、重みをゼロで初期化すると対称性の問題が発生し、隠れユニットが異なる特徴を学習するのを妨げる可能性があります。したがって、神経ネットワークの重みを初期化するには、ランダムまたは他の方法を使用するのが最良です。