diff --git a/docs/ja/week04/04-1.md b/docs/ja/week04/04-1.md
index 3eb7f53df..947abc80c 100644
--- a/docs/ja/week04/04-1.md
+++ b/docs/ja/week04/04-1.md
@@ -14,7 +14,7 @@ translator: Jesmer Wong
-この部分は、ニューラルネットワークのコンテキストでの基本的な線形代数の要約で説明します。 隠れ層からスタートすると $\boldsymbol{h}$:
+このパートでは、ニューラルネットワークの文脈における基本的な線形代数についておさらいします。 まずは単純な隠れ層$\boldsymbol{h}$から始めます:
$$
\boldsymbol{h} = f(\boldsymbol{z})
@@ -23,8 +23,8 @@ $$
-この輸出は ベクトル$z$ 非線形関数 $f$ に適用された結果です。
-ここの $z$ は 入力されたベクトル $\boldsymbol{x} \in\mathbb{R^n}$ をアフィン変換した $\boldsymbol{A} \in\mathbb{R^{m\times n}}$ の結果です:
+この出力は ベクトル$z$ に非線形関数 $f$ が適用された結果です。
+ここの $z$ は 入力されたベクトル $\boldsymbol{x} \in\mathbb{R^n}$ を$\boldsymbol{A} \in\mathbb{R^{m\times n}}$によってアフィン変換した結果です:
$$
\boldsymbol{z} = \boldsymbol{A} \boldsymbol{x}
@@ -33,7 +33,7 @@ $$
-簡単にするために、バイアスは無視されます。上記の線形方程式は次のように展開できます。
+簡単にするために、バイアスを無視します。上記の線形方程式は次のように展開できます。
$$
\boldsymbol{A}\boldsymbol{x} =
@@ -59,15 +59,15 @@ $$
-上記の $\boldsymbol{a}^{(i)}$ はマトリクス $\boldsymbol{A}$ のなかの第$i$の行です。
+上記の $\boldsymbol{a}^{(i)}$ は行列 $\boldsymbol{A}$ のなかの第$i$行です。
-この変換の意味を理解するために、$ a ^ {(1)} \ boldsymbol {x} $などの$ \ boldsymbol {z} $の1つのコンポーネントを分析してみましょう。例えば $ n = 2 $にすると、$ \ boldsymbol {a} =(a_1、a_2)$および$ \ boldsymbol {x} =(x_1、x_2)$とします。
+この変換の意味を理解するために、$a^{(1)}\boldsymbol{x}$などの $\boldsymbol{z}$の1つの要素を分析してみましょう。例えば $n=2$とすると、$\boldsymbol{a} = (a_1,a_2)$ および $\boldsymbol{x} = (x_1,x_2)$となります。
-$ \ boldsymbol {a} $および$ \ boldsymbol {x} $は、2D座標軸のベクトルとして描画できます。 ここで、$ \ boldsymbol {a} $と$ \ hat {\ boldsymbol {\ imath}} $の間の角度が$ \ alpha $で、$ \ boldsymbol {x} $と$ \ hat {\ boldsymbol {の間の角度が \ imath}} $は$ \ xi $であり、三角式を使用すると、$ a ^ \ top \ boldsymbol {x} $は次のように展開できます。
+$\boldsymbol{a}$および$\boldsymbol{x}$は、2次元座標系上のベクトルとして描画できます。 ここで、$\boldsymbol{a}$と$\hat{\boldsymbol{\imath}}$の間の角度が$\alpha$で、$\boldsymbol{x}$と$\hat{\boldsymbol{\imath}}$の間の角度が、$\xi$であるとします。すると、三角関数の公式を用いることで、$a^\top\boldsymbol{x}$は次のように展開できます。
$$
\begin {aligned}
@@ -82,12 +82,12 @@ $$
Another way to understand the linear transformation is by understanding that $\boldsymbol{z}$ can also be expanded as:
-->
-この輸出は入力されたベクトルがマトリクス$\boldsymbol{A}$にどのぐらいに配置された値です。
-これは、2つのベクトルの間の角度 $ \ xi- \ alpha $でみると同じく理解できるでしょう。
-$ \ xi = \ alpha $の場合、2つのベクトルは完全に合わせされ、最大値が達成されます。
-ただし $ \ xi-\ alpha = \ pi $の場合、2つのベクトルはお互いに反対方向を指するため $ \ boldsymbol {a} ^ \ top \ boldsymbol {x} $最小値に達します。
-要するに、この線形変換により、入力されたベクトルを$ A $で定義されたさまざまな方向へ投影された値を見ることができます。
-このようなやりかたも、より高い次元にも適用できるでしょう。
+この出力は入力されたベクトルが行列$\boldsymbol{A}$の特定の行とどのぐらい同じ方向を向いているかを測る値です。
+これは、2つのベクトルの間の角度 $\xi-\alpha$を観察することで、理解することができます。
+$\xi = \alpha$である場合、2つのベクトルは完全に同じ方向を向いており、最大値となります。
+もし $\xi - \alpha = \pi$である場合、2つのベクトルはお互いに反対方向を指すため $\boldsymbol{a}^\top\boldsymbol{x}$ 最小値となります。
+要するに、この線形変換により、入力されたベクトルが$ A $で定義されたさまざまな方向へ射影された値を見ることができます。
+このようなやりかたは、より高い次元にも適用することができます。
線形変換を理解するもう1つの方法は、$ \ boldsymbol {z} $も次のように展開すれば:
@@ -110,8 +110,8 @@ $$
-輸出は、マトリクス$ \ boldsymbol {A} $の列で重み付きさせた合計です。
-よって、信号は入力の構成にすぎません。
+出力は、行列$\boldsymbol{A}$の列で重み付けられた和です。
+よって、信号は入力を組み合わせたものにすぎません。
@@ -119,8 +119,8 @@ $$
-次に、オーディオデータ分析の例を使用して、線形代数の概念を畳み込みに展開します。
-まずは、全結合層をマトリクス乗算の形式で表すと:-
+次に、音声データ分析の例を使用して、線形代数の概念を畳み込みに拡張します。
+まずは、全結合層を行列積の形式で表すと:
$$
\begin{bmatrix}
@@ -144,12 +144,12 @@ $$
-この例では、重みがのせたマトリクスのサイズは$ 4 \ times 3 $、入力ベクトルのサイズは$ 3 \ times 1 $なので、出力ベクトルのサイズは$ 4 \ times 1 $です。
+この例では、重み行列のサイズは$4 \times 3$、入力ベクトルのサイズは$3 \times 1$なので、出力ベクトルのサイズは$4 \times 1$です。
-ただし、オーディオデータの場合、データサイズは非常に長くなります(サイズはもう3ではありません)。
-オーディオデータのサンプル数は、オーディオの時間(*例:3秒) かける サンプリングレート(例:* 22.05 kHz)です。 下記のように、入力ベクトル$ \ boldsymbol {x} $は非常に長くなります。 こうしては、重みマトリクスは「厖大」だと言えるでしょう。
+ただし、音声データの場合、データサイズは非常に長くなります(サイズはもう3ではありません)。
+音声データのサンプル数は、 *音声の時間(例:3秒)$\times$サンプリングレート(例: 22.05 kHz)* です。 下記のように、入力ベクトル$\boldsymbol{x}$は非常に長くなります。 よって、重み行列は「寸胴」になります。
$$
@@ -178,19 +178,19 @@ $$
-このような公式はトレーニングするとが困難になります。 幸いに、同じことが単純にできる方法があります。
+このような式は学習が困難になります。 幸いなことに、同じことを単純にできる方法があります。
-### 局所性プロパティ
+### 局所性
-データの局所性(*つまり、遠くにあるデータポイントは対象外)により、
-上記の重みマトリクスの$ w_ {1k} $は、$ k $の値が大きい場合に0で埋めることができます。
-よって、マトリクスの最初の行のカーネルは3のサイズはになります。
-このサイズ3のカーネルを$ \ boldsymbol {a} ^ {(1)} = \ begin {bmatrix} a_1 ^ {(1)}&a_2として示しましょう ^ {(1)}およびa_3 ^ {(1)} \ end {bmatrix} $。
+データの局所性(*例*:遠くにあるデータ点は対象外となる)により、
+上記の重み行列の$w_{1k}$ は、$k$の値が大きい場合に0で埋めることができます。
+よって、行列の最初の行のカーネルは3のサイズはになります。
+このサイズ3のカーネルを$\boldsymbol{a}^{(1)} = \begin{bmatrix} a_1^{(1)} & a_2^{(1)} & a_3^{(1)} \end{bmatrix}$としましょう。
$$
\begin{bmatrix}
@@ -220,11 +220,11 @@ $$
Natural data signals have the property of stationarity (*i.e.* certain patterns/motifs will repeat). This helps us reuse kernel $\mathbf{a}^{(1)}$ that we defined previously. We use this kernel by placing it one step further each time (*i.e.* stride is 1), resulting in the following:
-->
-### 定常性プロパティ
+### 定常性
-自然なデータ信号には定常性の特性があります(*特定のパターン/モチーフが繰り返されます*)。
-だから、先ほど定義したカーネル$ \ mathbf {a} ^ {(1)} $を再利用できます。
-よって、毎回に1ステップ飛び跳ね(*ストライドは1)でこのカーネルを使用すること、下記のようになります:
+自然信号には定常性があります(*特定のパターン/モチーフが繰り返されます*)。
+ですので、先ほど定義したカーネル$\mathbf{a}^{(1)}$を再利用することができます。
+毎回1ステップ飛ばし(*例*:ストライドが1)でこのカーネルを使用すると、下記のようになります:
$$
@@ -250,8 +250,8 @@ $$
-局所性の特性のおかげで、マトリックスの右上部分と左下部分の両方も$ 0 $ sで埋めることができ、マトリクスのスパース性になります。
-特定のカーネルを何度も再利用することを重み共有と呼ばれます。
+局所性のおかげで、行列の右上部分と左下部分の両方も$0$ で埋めることができ、行列がスパースになります。
+特定のカーネルを何度も再利用することは重み共有と呼ばれます。
-### テプリッツ行列の多重の層
+### 多層テプリッツ行列
-上記の特性で使って変更すると、残ったパラメーターの数は3だけです(* i.e. * $ a_1、a_2、a_3 $)。
-これを前回の12個のパラメーターの重みマトリクス(* ie * $ w_ {11}、w_ {12}、\ cdots、w_ {43} $)と比較すると、今のパラメーター数が多く制限されたため、展開したいのです。
+上記の特性を使って変更すると、残ったパラメーターの数は3つだけとなります(*例*: $a_1, a_2, a_3$)。
+これを前回の12個のパラメーターの重み行列(*例*: $w_ {11}, w_ {12}, \cdots, w_{43}$)と比較すると、今のパラメーター数は制限され過ぎています。これを同じように展開したいと考えます。
-前のマトリクスは、カーネル$ \ boldsymbol {a} ^ {(1)} $付きのあるレイヤー(**畳み込みレイヤー)と見なすことができます。
-次に、異なったカーネル$ \ boldsymbol {a} ^ {(2)} $、$ \ boldsymbol {a} ^ {(3)} $などで複数のレイヤーを作成でき、パラメーター数量を増やすことができます。
+前の行列は、カーネル$\boldsymbol{a}^{(1)}$付きのある層(*例*:畳み込み層)と見なすことができます。
+次に、異なったカーネル$\boldsymbol{a}^{(2)}$や$\boldsymbol{a}^{(3)}$などで複数の層を作成し、パラメーター数を増やすことができます。
-各層のには、多数複製された1つのカーネルをマトリクスに含まれます。
-このタイプのマトリクスは、テプリッツマトリクスと呼ばれます。
-このようなのテプリッツマトリクスでは、
-対角数字は一定とされます。
-ここで使用するテプリッツマトリクスは、スパース特性もあります。
+各層は、ただ一つの多数複製されたカーネルを含む行列を持ちます。このタイプの行列は、テプリッツ行列と呼ばれます。このようなのテプリッツ行列では、対角要素は一定とされます。ここで使用するテプリッツ行列は、スパース性もあります。
-最初のカーネル$ \ boldsymbol {a} ^ {(1)} $と入力ベクトル$ \ boldsymbol {x} $なので、この層で出力の最初のエントリは$ a_1 ^ {(1)} x_1です + a_2 ^ {(1)} x_2 + a_3 ^ {(1)} x_3 $。
-したがって、出力ベクトル全体は次のようになります。-
+最初のカーネル$\boldsymbol{a}^{(1)}$と入力ベクトル$\boldsymbol {x}$が与えられると、この層で出力の最初の要素は$a_1^{(1)}x_1 + a_2 ^ {(1)} x_2 + a_3 ^ {(1)} x_3$となります。したがって、出力ベクトル全体は次のようになります。
$$
\begin{bmatrix}
@@ -292,7 +287,7 @@ $$
-次の畳み込み層と他のカーネル(* eg * $ \ boldsymbol {a} ^ {(2)} $と$ \ boldsymbol {a} ^ {(3)} $)で同じマトリクス乗算法もと適用され、結果もふさわしくようになります。
+異なるカーネルを持つ次の畳み込み層*例*: $\boldsymbol{a}^{(2)}$と$\boldsymbol{a}^{(3)}$)に対しても同じ行列積を適用することができ、同様の結果を得ることができます。
@@ -300,50 +295,41 @@ $$
-Jupyter Notebookは下記のリンクにあります [here](https://github.com/Atcold/pytorch-Deep-Learning/blob/master/07-listening_to_kernels.ipynb).
+Jupyter Notebookは[ここ](https://github.com/Atcold/pytorch-Deep-Learning/blob/master/07-listening_to_kernels.ipynb)にあります.
-このノートブックでは、「スカラーでの計算」としての畳み込みのやりかたを理解していきます。
+このノートブックでは、「スカラー積」としての畳み込みのやりかたを理解していきます。
-ライブラリ `librosa`を使用すると、オーディオクリップ$ \ boldsymbol {x} $とそのサンプリングレートを読み込むことができます。
-この例に、サンプルは70641個があり、サンプリングレートは22.05kHz、クリップの全長は3.2秒です。
-読み込まれたオーディオ信号はばらつきがあり(図1を参照)、$ y $軸の振幅から見るとどのような声がするのかを推測できます。
-オーディオ信号$ x(t)$は、実際にはWindowsシステムをオフにしたときに再生されるサウンドです(図2を参照)。
+ライブラリ `librosa`を使用すると、オーディオクリップ$\boldsymbol {x}$とそのサンプリングレートを読み込むことができます。 この例では、サンプルは70641個あり、サンプリングレートは22.05kHz、クリップの全長は3.2秒です。読み込まれた音声信号はばらつきがあり(図1を参照)、$y$軸の振幅から見るとどのような声がするのかを推測することができます。音声信号$x(t)$は、実際にはWindowsシステムをオフにしたときに再生されるサウンドです(図2を参照)。
![]({{site.baseurl}}/images/week04/04-1/audioSignal.png)
-Fig. 1: A visualization of the audio signal.
+図1: 音声信号の可視化
![]({{site.baseurl}}/images/week04/04-1/notes.png)
-Fig. 2: Notes for the above audio signal.
+図2: 上の音声信号に対する注意
-波形から音符を分離する必要があります。 これをフーリエ変換(FT)で使用すると、すべての音が一緒に出て、各ピッチの正確な時間と場所を把握するのが難しくなります。
-よって、ローカライズされたFT変換が必要です(スペクトログラムとも呼ばれます)。
-スペクトログラムからみますと(図3を参照)、異なったピッチと異なった周波数でピークが見えます(*例:* 1600で最初のピッチピーク)。 それらの周波数で4つのピッチを連結すると、元の信号のピッチバージョンが得られます。
+波形から音符を分離する必要があります。 これをフーリエ変換(FT)で行おうとすると、すべての音が一緒に出て、各ピッチの正確な時間と場所を把握するのが難しくなります。よって、局所化されたFTが必要となります(スペクトログラムとも呼ばれます)。スペクトログラムをみるとわかるように(図3を参照)、異なったピッチと異なった周波数でピークが見えます(*例:* 1600で最初のピッチピーク)。 それらの周波数で4つのピッチを連結すると、元の信号がピッチされたものが得られます。
![]({{site.baseurl}}/images/week04/04-1/spectrogram.png)
-Fig. 3: Audio signal and its spectrogram.
+図3: 音声信号とそのスペクトログラム
-入力信号とすべてのピッチ(たとえば、ピアノのすべての音階)を畳み込むすると、入力信号のすべてのノートを抽出できます(*特定のカーネルにオーディオと一致したときの的中して抽出可能)。
-元の信号といろんなピッチを連結された信号のスペクトログラムは図4に示し、
-元の信号と4つのピッチの周波数を図5に示します。
-4つのカーネルを入力信号(元の信号)と畳み込みされた波形を図6に示します。
-図6には、畳み込みされた信号のオーディオクリップで、ノートの抽出における畳み込みの有効性を証明します。
+入力信号とすべてのピッチ(たとえば、ピアノのすべての音階)を畳み込むと、入力(*特定のカーネルが音声と一致したときに当たる*)のすべての音符を抽出できます。 元の信号といろんなピッチを連結した信号のスペクトログラムを図4に、元の信号と4つのピッチの周波数を図5に示します。4つのカーネルを入力信号(元の信号)と畳み込みこんだものを図6に示します。図6と畳み込みされた信号のオーディオクリップが、ノートの抽出における畳み込みの有効性を証明しています。
-
+
+
+
+![]({{site.baseurl}}/images/week04/04-1/fig4.png)
+図4: 元の信号のスペクトログラム(左)とピッチが連結されたもののスペクトログラム(右)
+
+
+
+![]({{site.baseurl}}/images/week04/04-1/fig5.png)
+図5: メロディーの最初の音符.
+
+
+
+![]({{site.baseurl}}/images/week04/04-1/fig6.png)
+図6: 4つのカーネルの畳み込み
## 異なるデータセットの次元数
-最後に、次元数のさまざまな表現とその例の短い余談です。
-ここで、仮に入力セット$ X $がドメイン$ \ Omega $からチャネル$ c $にマッピングされたことを考えます。
+最後に、次元数のさまざまな表現とその例について、短い余談をします。
+ここで、仮に入力セット$X$がドメイン$\Omega$からチャネル$c$にマッピングされたとします。
-### 示例
+### 例
-* オーディオデータ:ドメインは1次元; 時間でインデックス付けの離散信号; $ c $のチャネル数量は、1(モノ)、2(ステレオ)、5 + 1(ドルビー5.1)などがあります**
-*画像データ:ドメインは2次元(ピクセル); $ c $の範囲は、1(グレースケール)、3(カラー)、20(ハイパースペクトル)、*など*
-*特殊相対論:ドメインは$ \ mathbb {R ^ 4} \ times \ mathbb {R ^ 4} $(時空$ \ times $フォーモメンタム)です。 $ c = 1 $の場合、ハミルトニアンと呼ばれます。
+* 音声データ:ドメインは1次元; 時間でインデックス付けられた離散信号; チャネル数$c$は、1(モノ)、2(ステレオ)、5 + 1(ドルビー5.1)*など*があります。
+* 画像データ:ドメインは2次元(ピクセル); $c$の範囲は、1(グレースケール)、3(カラー)、20(ハイパースペクトル)、*など*があります。
+* 特殊相対論:ドメインは$\mathbb{R^4} \times \mathbb{R^4}$(時空$\times$ 4モメンタム)です。 $c=1$の場合、ハミルトニアンと呼ばれます。
![]({{site.baseurl}}/images/week04/04-1/fig7.png)
-Fig. 7: Different dimensions of different types of signals.
+図7: 異なる信号の異なる次元
diff --git a/docs/ja/week04/04.md b/docs/ja/week04/04.md
index f77468805..6e6e91aeb 100644
--- a/docs/ja/week04/04.md
+++ b/docs/ja/week04/04.md
@@ -10,9 +10,9 @@ translator: Jesmer Wong
-## 実習
+## 演習
-線形代数の簡単な復習から始めてから、オーディオデータを例として使って、畳み込みとのトピックに拡張します。 局所性、定常性、テプリッツ行列などの主要な概念が繰り返されます。 次に、ピッチ分析における畳み込みパフォーマンスのライブデモを行います。 最後に、さまざまなデータの次元の概念について細かい余談があります。
\ No newline at end of file
+線形代数の簡単な復習から始め、音声データを例として使って、このトピックを畳み込みに拡張します。 局所性、定常性、テプリッツ行列などの主要な概念が繰り返されます。 次に、ピッチ分析における畳み込みのパフォーマンスのライブデモを行います。 最後に、さまざまなデータの次元の概念について短い余談があります。
\ No newline at end of file
diff --git a/docs/ja/week05/05-1.md b/docs/ja/week05/05-1.md
index 6ac98ba9a..6e322a853 100644
--- a/docs/ja/week05/05-1.md
+++ b/docs/ja/week05/05-1.md
@@ -15,7 +15,7 @@ translator: Jesmer Wong
## [勾配降下法](https://www.youtube.com/watch?v=--NZb480zlg&t=88s)
-最適化手法の研究は、いろんな方法から最も基本的だが最悪の(下記に説明する)方法である勾配降下法から始めたいと思います。
+いろんな方法がありますが、その中で最も基本的だけれど最悪の(下記に説明する)方法である勾配降下法から、最適化手法の勉強を始めたいと思います。
問題
@@ -25,7 +25,7 @@ $$
$$
-**往復算出結果:**
+**反復解法:**
$$
w_{k+1} = w_k - \gamma_k \nabla f(w_k)
@@ -37,31 +37,31 @@ $$
- $\gamma_k$ is the step size,
- $\nabla f(w_k)$ is the gradient of $f$. -->
上記の
- - $w_{k+1}$は $k$-回の繰り返しで更新された積算,
- - $w_k$は $k$-回の積算する前のイニシャル値,
- - $\gamma_k$はステップサイズ,
- - $\nabla f(w_k)$は$f$の勾配値.
+ - $w_{k+1}$は $k$-回の繰り返しで更新された値、
+ - $w_k$は $k$-回の更新する前の初期値、
+ - $\gamma_k$はステップサイズ、
+ - $\nabla f(w_k)$は$f$の勾配。
-ここでの前提は、関数$ f $が連続的で微分可能であることです。
-目的は、最適化関数の最低点(谷)を見つけることです。 ただし、この谷への実際の方向は不明なので、
-局部的に、負の勾配は最適な情報しかもっていません。
-その方向に小さいステップサイズで進んで、近づいていくことだけです。 小さな一歩を踏み出してから、再び新しい勾配を計算し、谷に到達するまでその方向に少しだけ移動します。 すると、勾配降下が行うすべてのことは、最も急な降下(負の勾配)の方向に従うことです。
+ここでの前提は、関数$f$が連続的で微分可能であることです。
+目的は、最適化関数の最低点(谷)を見つけることです。 ただし、この谷への実際の方向は不明です。
+局所的に探ることしかできないため、負の勾配が手に入る最適な情報です。
+その方向に小さいステップサイズで進んで、近づいていくだけです。 小さな一歩を踏み出してから、再び新しい勾配を計算し、谷に到達するまでその方向に少しだけ移動します。 すると、本質的に勾配降下法が行っているのは、最も急な降下(負の勾配)の方向に向かうことだけです。
-反復更新されたこの$ \ gamma $パラメーターは、**ステップサイズ**と呼ばれます。 最適なステップサイズの値は一般にわかりませんので、いろんな値を試す必要があります。 標準的な方法は、対数スケールで一連の値を試してから、最適な値を採用することです。
+反復更新におけるこのパラメーター$\gamma$は、**ステップサイズ**と呼ばれます。 最適なステップサイズの値は一般にわかりませんので、いろんな値を試す必要があります。 標準的な方法は、対数スケールで一連の値を試してから、最適な値を採用することです。
-いくつかのシナリオが発生する可能性のあります。上の画像は、1D 2次公式でのこれらのシナリオを示されています。 学習率が低すぎる場合、確実に最小値に進められますが、トレーニング時間が予想よりかなりかかる場合があります。
+いくつかのシナリオが発生する可能性があります。上の画像は、パラメータが1次元の2次関数でのこれらのシナリオを示しています。 学習率が低すぎる場合、確実に最小値に進めますが、訓練時間が予想よりかなりかかる場合があります。
-一般に、直接最小値に到達するステップサイズを選択できることは非常に困難(または不可能)です。
-それより、このステップサイズという値は、最適値より少し大きいにするのは理想です。
-そうすると、実際操作に最も迅速な収束を提供できます。
-逆に、学習率が高すぎると、反復更新時が最小値から遠ざかり、発散になります。
-よって、学習率の選択は発散より少し低いのを使用します。
+一般に、直接最小値に到達するステップサイズを選択することは非常に困難(または不可能)です。
+このステップサイズという値は、最適値より少し大きいにするのが理想的です。
+そうすると、実応用上は最も速く収束することができます。
+逆に、学習率が大きすぎると、反復更新によって最小値から遠ざかり、発散してしまいます。
+よって、学習率は発散するよりも少し小さいもの選択します。
@@ -78,52 +78,53 @@ $$
-確率的勾配降下法では、実際の勾配ベクトルより確率的に推定された勾配ベクトルで計算します。 特にニューラルネットワークの場合、確率的推定っていう意味は、単一のデータポイント(単一のインスタンス)で損失した勾配とのことです。
+確率的勾配降下法では、実際の勾配ベクトルより確率的に推定された勾配ベクトルで計算します。 特にニューラルネットワークの場合、確率的推定とは、単一のデータ点(単一のインスタンス)での損失の勾配のことです。
-$f_i$はニューラルネットワークの第$i$個のインスタンスの損失関数とのことで、
+$f_i$はニューラルネットワークの第$i$個のインスタンスの損失関数のことで、
$$
f_i = l(x_i, y_i, w)
$$
-この$f$はすべてのインスタンスの合計損失であり、目標として最小化させたいのことです。
+
+最終的に最小化したい関数は、全てのインスタンスについての全体の損失である$f$です。
$$
f = \frac{1}{n}\sum_i^n f_i
$$
-確率的勾配降下法(SGD)では、$ f_i $の勾配によって重みを更新します(総損失$ f $の勾配で更新することではありません。)
+確率的勾配降下法(SGD)では、$f_i$の勾配によって重みを更新します(総損失$f$の勾配で更新することではありません。)
$$
\begin{aligned}
-w_{k+1} &= w_k - \gamma_k \nabla f_i(w_k) & \quad\text{(i chosen uniformly at random)}
+w_{k+1} &= w_k - \gamma_k \nabla f_i(w_k) & \quad\text{(i は一様にランダムに選ばれる)}
\end{aligned}
$$
-$ i $がランダムに選択された場合、$ f_i $は$ f $のノイズが多いがバイアスなしの推定量であり、数学的に次のように記述されます。
+$i$がランダムに選択された場合、$f_i$はノイズが多いものの、$f$の不偏推定量となります。これは数学的に次のように記述されます。
$$
\mathbb{E}[\nabla f_i(w_k)] = \nabla f(w_k)
$$
-これで、SGDの予想される第$ k $番目のステップは、フル勾配降下法の$ k $番目のステップと同じになります。
+これで、SGDの第$k$番目のステップの期待値は、フル勾配降下法の$k$番目のステップと同じになります。
$$
\mathbb{E}[w_{k+1}] = w_k - \gamma_k \mathbb{E}[\nabla f_i(w_k)] = w_k - \gamma_k \nabla f(w_k)
$$
-よって、SGDの更新は、予想されるフルバッチ更新と同じです。 ただし、SGDは、ノイズを伴う勾配降下法だけではありません。 SGDは高速であるだけでなく、フルバッチ勾配降下法よりも優れた結果を得ることができます。 SGDのノイズの部分は、区分的な最小値を回避し、より良い(より深い)グローバル的な最小値を見つけるのに役立ちます。 この現象は**アニーリング**と呼ばれます。
+よって、SGDの更新は、フルバッチ更新と期待値の意味で同じです。 ただし、SGDは、単なるノイズを伴う勾配降下法ではありません。 SGDは高速であるだけでなく、フルバッチ勾配降下法よりも優れた結果を得ることができます。 SGDのノイズの部分は、浅い極小値を回避し、より良い(より深い)グローバルな最小値を見つけるのに役立ちます。 この現象は**アニーリング**と呼ばれます。
![]({{site.baseurl}}/images/week05/05-1/annealing.png)
-Figure 2: Annealing with SGD
+図2: SGDによるアニーリング
要約すると、確率的勾配降下法(SGD)の利点は次のとおりです。
- 1.インスタンスとの間で多くの冗長な情報があります。 SGDは、これらの冗長な計算の多くを防ぎます。
- 2.初期段階では、勾配の情報と比較してノイズは小さいです。 したがって、SGDステップの降り方は普通勾配降下法(GD)ステップと*ほぼ同じ*です。
- 3. *アニーリング* -SGD更新のノイズにより、(浅い)非グローバル的最小値への収束が妨げられる可能性があります。
- 4.確率的勾配降下法は、計算的には大幅に減少できです(すべてのデータポイントで計算しないため)。
+ 1. インスタンス間に多くの冗長な情報があります。 SGDは、これらの冗長な計算の多くを防ぎます。
+ 2. 初期段階では、勾配の情報と比較してノイズは小さいです。 したがって、SGDステップの降り方は普通の勾配降下法(GD)のステップと*ほぼ同じ*です。
+ 3. *アニーリング:* SGD更新のノイズにより、(浅い)グローバルではない極小値への収束が妨げられる可能性があります。
+ 4. 確率的勾配降下法は、計算量を大幅に削減できます(すべてのデータ点で計算しないため)。
-ミニバッチ処理
-ミニバッチ処理では、1つのインスタンスだけで計算するのではなく、ランダムに選択された複数のインスタンスでの損失を考慮します。 これにより、ステップ更新につきノイズが減少します。
+### ミニバッチ処理
+ミニバッチ処理では、1つのインスタンスだけで計算するのではなく、ランダムに選択された複数のインスタンスでの損失を考慮します。 これにより、ステップ更新に伴うノイズが減少します。
$$
w_{k+1} = w_k - \gamma_k \frac{1}{|B_i|} \sum_{j \in B_i}\nabla f_j(w_k)
$$
-単一のインスタンスの代わりにミニバッチを使用することで、多くの場合ハードウェアにより有効に活用できます。 たとえば、単一のインスタンスでトレーニングする場合、GPUは十分に活用されません。 分散ネットワークでトレーニングという技術は、マシンの大きなクラスターの間に大きなミニバッチを分割し、結果の勾配を集計します。 Facebookは最近、分散トレーニングを使用して、1時間以内にImageNetデータでネットワークをトレーニングしました。
+単一のインスタンスの代わりにミニバッチを使用することで、多くの場合ハードウェアをより有効活用できます。 たとえば、単一のインスタンスで訓練する場合、GPUを十分に活用することができません。 分散ネットワークで訓練するという技術では、マシンの大きなクラスターの間に大きなミニバッチを分割し、結果の勾配を集計します。 Facebookは最近、分散学習を使用して、1時間以内にImageNetデータでネットワークを訓練しました。
-勾配降下法をフルバッチで使用してはならないことに注意することが重要です。 フルバッチサイズでトレーニングする場合は、LBFGSと呼ばれる最適化手法はおすすめです。 PyTorchとSciPyはどちらも、この手法の実装を提供します。
+勾配降下法をフルバッチで使用してはならないことに注意することが重要です。 フルバッチサイズで訓練する場合は、LBFGSと呼ばれる最適化手法がおすすめです。 PyTorchとSciPyはどちらも、この手法の実装を提供しています。
-モメンタム(態勢)では、更新パラメータは1個ではなく2個($ p $と$ w $)があります。 更新は次のとおりです。
+## [モメンタム](https://www.youtube.com/watch?v=--NZb480zlg&t=1672s)
+モメンタムでは、更新パラメータは1個ではなく2個($p$と$w$)あります。 更新式は次のとおりです。
$$
\begin{aligned}
@@ -170,7 +172,7 @@ w_{k+1} &= w_k - \gamma_kp_{k+1} \\
$$
-$ p $はSGDモメンタムと呼ばれます。 各更新ステップに、係数$ \ beta $(0から1の間の値)で衰減させてから、確率的勾配量を古い態勢値に追加します。 $ p $は、勾配の移動平均値と考えることのでしょう。 最後に、$ w $を新しい態勢$ p $の方向に移動します。
+$p$はSGDモメンタムと呼ばれます。 各更新ステップで、係数$\beta$(0から1の間の値)によって衰減させてから、確率的勾配を古いモメンタムに追加します。 $p$は、勾配の移動平均値と考えることができるでしょう。 最後に、$w$を新しいモメンタム$p$の方向に移動します。
代替形式:確率的ヘビーボール法
@@ -182,29 +184,32 @@ w_{k+1} &= w_k - \gamma_k\nabla f_i(w_k) + \beta_k(w_k - w_{k-1}) & 0 \leq \beta
$$
-この形式は、前の形式と数学的に同等です。 ここで、次のステップは、前のステップの方向($ w_k --w_ {k-1} $)と新しい負の勾配の組み合わせです。
+この形式は、前の形式と数学的に等価です。 ここで、次のステップは、前のステップの方向($w_k - w_{k-1}$)と新しい負の勾配の組み合わせです。
-SGDの態勢量は、物理学における態勢量の概念に似ています。 最適化プロセスは、重いボールを丘に転がせると似ています。 態勢量は、ボールがすでに移動しているのと同じ方向に移動し続けるようにしてます。勾配は、ボールを他の方向に押す力と考えることもできるでしょう。
+
+### 直観
+
+SGDのモメンタムは、物理学におけるモメンタムの概念に似ています。 最適化プロセスは、重いボールを丘に転がすことと似ています。 モメンタムは、ボールがすでに移動しているのと同じ方向に移動し続けるようにしています。勾配は、ボールを他の方向に押す力と考えることもできるでしょう。
![]({{site.baseurl}}/images/week05/05-1/momentum.png)
-Figure 3: Effect of Momentum
-Source: distill.pub
+図3: モメンタムの効果
+ソース: distill.pub
-(左の図のように)進行方向を激しく変更するのではなく、態勢量は適度に変更を行います。 態勢量は、SGDのみを使用する場合に行った一般的な振動を衰減させます。
+(左の図のように)進行方向を激しく変更するのではなく、モメンタムは適度に変更を行います。 モメンタムは、SGDのみを使用する場合に一般に生じる振動を衰減させます。
-$ \ beta $パラメーターは衰減量と呼ばれます。 $ \ beta $はゼロより大きくなければなりません。ゼロの場合は、GDとおなじだからです。 また、1未満である必要があります。そうでない場合、すべてが拡散してしまいます。 $ \ beta $の値が小さいほど、方向の変更が速くなります。 値が大きいほど、ターンに時間がかかります。
+パラメーター$\beta$は衰減量と呼ばれます。 $\beta$はゼロより大きくなければなりません。ゼロの場合は、GDと同じだからです。 また、1未満である必要があります。そうでない場合、すべてが発散してしまいます。 $\beta$の値が小さいほど、方向の変更が速くなります。 値が大きいほど、ターンするのに時間がかかります。
![]({{site.baseurl}}/images/week05/05-1/momentum-beta.png)
-Figure 4: Effect of Beta on Convergence
+図4: βが収束に与える影響
@@ -214,22 +219,22 @@ $ \ beta $パラメーターは衰減量と呼ばれます。 $ \ beta $はゼ
$\beta$ = 0.9 or 0.99 almost always works well.
-実用操作ガイドライン
+### 実用上のガイドライン
-態勢値は、確率的勾配降下法で常に使用する必要があります。
-$ \ beta $ = 0.9または0.99はほとんどの場合うまくやります。
+モメンタムは、確率的勾配降下法で常に使用する必要があります。
+$\beta$ = 0.9または0.99はほとんどの場合うまくいきます。
-収束を維持するため、態勢値パラメータを増やす一方、ステップサイズパラメータを減らす必要があります。 $ \ beta $が0.9から0.99に変更された場合、学習率を10分の1に減らす必要があります。
+収束を維持するため、モメンタムパラメータを増やす一方、ステップサイズパラメータを減らす必要があります。 $\beta$が0.9から0.99に変更された場合、学習率を10分の1に減らす必要があります。
-なぜ態勢値で効きますか?
+### なぜモメンタムはうまくいくのか
-加速値
+#### 加速度
-以下は、ネステロフの態勢値の更新ルールです。
+以下は、ネステロフのモメンタムの更新則です。
$$
p_{k+1} = \hat{\beta_k}p_k + \nabla f_i(w_k) \\
@@ -237,31 +242,31 @@ w_{k+1} = w_k - \gamma_k(\nabla f_i(w_k) +\hat{\beta_k}p_{k+1})
$$
-ネステロフの態勢値で定数をあわせて慎重に選択すると、収束を加速できます。 ただし、これは凸型最適化問題にのみ適用され、ニューラルネットワークには適用されません。
+ネステロフのモメンタムは,定数を慎重に選択すると、収束を加速できます。 ただし、これは凸最適化問題にのみ適用され、ニューラルネットワークには適用されません。
-通常の態勢値も加速された方法と言われていますが、実際には、二次方程式に対して加速されるのみです。 また、SGDにはノイズがあり、加速はノイズではうまく機能しないため、加速はSGDではうまく機能しません。 したがって、Momentum SGDには多少の加速がありますが、それだけでは、この手法の高性能を説明するのに適していません。
+通常のモメンタムも加速された方法と言われていますが、実際には、二次方程式に対して加速されるのみです。 また、SGDにはノイズがあり、加速はノイズではうまく機能しないため、加速はSGDではうまく機能しません。 したがって、モメンタムSGDには多少の加速がありますが、それだけでは、この手法の高性能を説明するのに適していません。
-おそらく、態勢値がよいとの実際操作とより可能性ある理由は、ノイズ平滑化です。
+おそらく、より実際的でありうるあるモメンタムがうまくいく理由は、ノイズ平滑化です。
-態勢値は勾配を平均します。 これは、各ステップの更新に使用する勾配の移動平均です。
+モメンタムは勾配を平均します。 これは、各ステップの更新に使用する勾配の移動平均です。
-理論的には、SGDをうまくやるためには、すべてのステップの更新を平均する必要があります。
+理論的には、SGDをうまく動かすには、すべてのステップの更新を平均する必要があります。
$$
\bar w_k = \frac{1}{K} \sum_{k=1}^K w_k
$$
-態勢値のあるSGDの優れている点は、この平均化が不要になったことです。 態勢値は、最適化プロセスに平滑化を追加します。これにより、各更新がソリューションの適切な近似になります。 SGDを使用すると、一連の更新を平均して、その方向に一歩踏み出すことができます。
+モメンタムのあるSGDの優れている点は、この平均化が不要になったことです。 モメンタムは、最適化プロセスに平滑化を追加します。これにより、各更新が解の適切な近似になります。 SGDを使用すると、一連の更新を平均して、その方向に一歩踏み出すことができます。
-## [アダプティブ(適応)方法](https://www.youtube.com/watch?v=--NZb480zlg&t=2675s)
+## [アダプティブ(適応的な)方法](https://www.youtube.com/watch?v=--NZb480zlg&t=2675s)
-態勢量つき確率的勾配降下法(SGD)は、現在、多くのML問題に対する最先端の最適化手法のやりかたです。しかし、長年にわたって考え出した一般にアダプティブ方法と呼ばれる他の方法があって、条件の悪い問題(SGDが通じない場合)に特に役立ちます。
+モメンタムつき確率的勾配降下法(SGD)は、現在、多くの機械学習の問題に対する最先端の最適化手法のやりかたです。しかし、長年にわたって考え出され一般に適応的な方法と呼ばれる他の方法があって、これは悪条件の問題(SGDがうまくいかない場合)に対して特に役立ちます。
-SGDで、ネットワーク内のすべての重みは、同じ学習率(グローバル$ \ gamma $)との方程式を使用して更新されます。ここで、適応方法というのは、*各重みの学習率を個別に適応させます*。このために、各重みの勾配の情報も使用されます。
+SGDでは、ネットワーク内のすべての重みは、同じ学習率(グローバル$\gamma$)を用いた式で更新されます。ここで、適応的な方法というのは、*各重みの学習率を個別に適応させる方法のことをいいます*。このために、各重みの勾配の情報も使用されます。
-実際操作によく使用されるネットワークは、構造が異なるになります。たとえば、CNNの入力レイヤーは大きな画像の非常に浅い畳み込み層であり、ネットワークの後半では、小さな画像の多数のチャネルの畳み込みで実現するようになっています。上記の操作は両方とも非常に異なっているため、前半のレイヤーに適用した学習率は、ネットワークの後半のレイヤーでは必ずしも適用できない場合もあります。したがって、レイヤーごとにのアダプティブで学習率で微調整すると役立つ可能性があります。
+実応用上よく使用されるネットワークは、異なる部分に異なる構造を持っています。たとえば、CNNの入力層は大きな画像の非常に浅い畳み込み層であり、ネットワークの後半では、小さな画像の多数のチャネルの畳み込みで実現するようになっています。上記の操作は両方とも非常に異なっているため、前半の層に適用した学習率は、ネットワークの後半の層では必ずしも適用できない場合もあります。したがって、層ごとに適応的に学習率を微調整すると役立つ可能性があります。
-ネットワークの後半部分(下の図1に4096)の重みは、出力を直接決定し、非常に強い影響を及ぼします。よって、それらにはより小さな学習率が必要です。それより、初期の重みは、特にランダムに初期化された場合、出力に対する個々の影響が小さいです。
+ネットワークの後半部分(下の図1の4096)の重みは、出力を直接決定し、非常に強い影響を及ぼします。よって、それらにはより小さな学習率が必要です。対して、それより浅い層の重みは、特にランダムに初期化された場合、出力に対する個々の影響が小さくなります。
![]({{site.baseurl}}/images/week05/05-2/5_2_vgg.png)
-Figure 1: VGG16
+図1: VGG16
@@ -42,9 +42,9 @@ SGDで、ネットワーク内のすべての重みは、同じ学習率(グ
-*二乗平均平方根伝播ロース*の重要なアイデアは、勾配が二乗平均平方根で正規化されるとのことです。
+*Root Mean Square Propagation(RMSProp,二乗平均平方根伝播)* の重要なアイデアは、勾配が二乗平均平方根で正規化されることです。
-以下の式で、勾配を2乗することは、ベクトルの各座標値を個別に2乗されるということです。
+以下の式で、勾配を2乗することは、ベクトルの各座標値を個別に2乗するということです。
$$
\begin{aligned}
@@ -60,22 +60,22 @@ We update $v$ to estimate this noisy quantity via an *exponential moving average
The original method keeps an exponential moving average of a non-central second moment, so we don't subtract the mean here. The *second moment* is used to normalize the gradient element-wise, which means that every element of the gradient is divided by the square root of the second moment estimate. If the expected value of gradient is small, this process is similar to dividing the gradient by the standard deviation.
Using a small $\epsilon$ in the denominator doesn't diverge because when $v$ is very small, the momentum is also very small. -->
-ここで、$ \ gamma $はグローバル学習率であり、
-$ \ epsilon $はゼロ除算を回避するため ゼロに近い値($ 10 ^ {-7} $または$ 10 ^ {-8} $のオーダー)で設定され、
-$ v_ {t + 1} $は2次モーメントの推定値です。
+ここで、$\gamma$はグローバルな学習率であり、
+$\epsilon$はゼロ除算を回避するためにゼロに近い値($10^{-7}$または$10^{-8}$のオーダー)で設定され、
+$v_{t + 1}$は2次モーメントの推定値です。
-$ v $を更新して、*指数移動平均*(ある量に時間をたつとともに変化するその値を平均的に維持する標準的な方法)を介してこのノイズの量を推定します。より多くの情報を提供しますので、新しい値はより大きな重みを付ける必要があります。あるやりかたは、古い値を指数で衰減させることです。非常に古い$ v $の値は、0から1の間で変化した$ \ alpha $定数で各ステップで衰減させます。これにより、古い値が指数で減衰させた値はもう移動平均の計算に重要な部分でなくならないようにします。
+$v$を更新して、*指数移動平均*(時間とともに変化するある量を平均的に維持する標準的な方法)を介してこのノイズの量を推定します。新しい値はより多くの情報を提供しますので、より大きな重みを付ける必要があります。一つのやりかたは、古い値を指数衰減させることです。非常に古い$v$の値は、0から1の間の定数$\alpha$で各ステップで衰減させます。これにより、指数減衰させた古い値は、もう移動平均の計算に重要な部分ではなくなります。
-元の方法では、非中央の2次モーメントで指数移動平均を保持されるため、ここでは平均を減算しません。 * 2次モーメント*は、勾配を座標値ごとに正規化するために使用されます。つまり、勾配のすべての要素が2次モーメント推定値の平方根で除算されます。勾配の期待値が小さい場合、このプロセスは勾配を標準偏差で除算するのとほぼ同じです。
+元の方法では、中心化されていない2次モーメントで指数移動平均が保持されるため、ここでは平均を減算しません。 *2次モーメント*は、勾配を座標値ごとに正規化するために使用されます。つまり、勾配のすべての要素が2次モーメント推定値の平方根で除算されます。勾配の期待値が小さい場合、このプロセスは勾配を標準偏差で除算するのとほぼ同じです。
-分母に小さな$ \ epsilon $を使用しても、$ v $が非常に小さい場合、態勢値も非常に小さいため、発散しません。
+分母に小さな$\epsilon$を使用しても、$v$が非常に小さい場合、モメンタムも非常に小さいため、発散しません。
### ADAM
-ADAM、またはRMSpropに態勢値とあわせる*アダプティブモーメント量推定*は、より一般的に使用される方法です。 態勢値の更新は指数移動平均に変換され、$ \ beta $を処理する同時に学習率を変更する必要はありません。 RMSpropの場合と同じく、ここでは勾配の2乗の指数移動平均を取ります。
+ADAM、もしくは*Adaptive Moment Estimation、適応的モーメント推定*は、RMSpropにモメンタムをあわせる手法であり、より一般的に用いられています。 モメンタムの更新は指数移動平均に変換され、$\beta$を処理するときに一緒に学習率を変更する必要はありません。RMSpropの場合と同じく、ここでは勾配の2乗の指数移動平均を取ります。
$$
\begin{aligned}
@@ -86,21 +86,21 @@ w_{t+1} &= w_t - \gamma \frac {m_{t}}{ \sqrt{v_{t+1}} + \epsilon}
$$
-ここの$m_{t+1}$はモーメントの指数移動平均値。
+ここの$m_{t+1}$はモーメントの指数移動平均です。
-初期の反復計算に移動平均値を維持するためのバイアス補正は、ここには示されていません。
+初期の反復計算時に移動平均を維持するためのバイアス補正は、ここには示されていません。
-実際操作
+### 実際的な側面
-ニューラルネットワークをトレーニングする場合、SGDはトレーニングプロセスの早期に間違った方向に進むことがよくありますが、RMSpropは正しい方向に向かうを補正させます。 ただし、RMSpropは通常のSGDと同じくノイズに受け取りさせるため、ローカル的な最小値に近づくと、この最適値の周りで大幅に跳ね返ります。 SGDに態勢値をつけるのと同じように、ADAMでも同じような改善が見られます。 このAdamはノイズの少ない最小値がたどり着けられるため、** ADAMは一般的にRMSpropよりも推奨されます**
+ニューラルネットワークを訓練する場合、SGDは訓練プロセスの早期に間違った方向に進むことがよくありますが、RMSpropは正しい方向に向かうように補正をさせます。 ただし、RMSpropは通常のSGDと同じくノイズの影響を受けるため、極小値に近づくと、この極小値の周りで大幅に跳ね返ります。 SGDにモメンタムをつけるのと同じように、ADAMでも同じような改善が見られます。 ノイズの少ない最小値にたどり着けられるため、**ADAMは一般的にRMSpropよりも推奨されます**
![]({{site.baseurl}}/images/week05/05-2/5_2_comparison.png)
-Figure 2: SGD *vs.* RMSprop *vs.* ADAM
+図2: SGD vs. RMSprop vs. ADAM
-ADAMは、ある自然言語処理モデルでトレーニングするのは必要です。ニューラルネットワークを最適化するには、一般的にモーメントつけのSGDまたはADAMが推奨されます。ただし、論文に説明されたADAMの理論は十分に理解されておらず、いくつかの欠点もあります。
+ADAMは、ニューラルネットを自然言語処理モデルとして用いるために訓練する上で、必要です。ニューラルネットワークを最適化するには、一般的にモーメント付きのSGDまたはADAMが推奨されます。ただし、論文に説明されたADAMの理論は十分に理解されておらず、いくつかの欠点もあります。
-*非常に単純なテスト問題で、収束しないこともあります。
-*一般化のエラーを与えるとよく言われています。ニューラルネットワークが、ゼロロスとしてトレーニングされた目標としたトレーニング用データで使用された場合、まだみたことない他のデータポイントでトレーニングされたその損失はゼロになりません。特に画像の問題で、SGDを使用した場合よりも一般化エラーが悪化することがよくあります。より悪化される要因には、ADAMの最も近い極小値、ノイズの減少、またはその構造などは例として可能性があります。
-* ADAMでは3つのバッファーを維持する必要がありますが、SGDでは2つのバッファーが必要です。数GBのサイズのモデルをトレーニングしない限り、これは実際操作には問題がありません。かえって、モデルはメモリに収まらない可能性があります。
-* 1つではなく2つの運動量パラメータを調整する必要があります。
+* 非常に単純なテスト問題で、収束しないこともあります。
+* 汎化誤差を与えるとよく言われています。ニューラルネットワークが訓練用データに対して誤差を達成した場合、まだみたことない他のデータ点で訓練された損失はゼロになりません。特に画像の問題で、SGDを使用した場合よりも汎化誤差が悪化することがよくあります。より悪化する要因としては、ADAMが最も近い極小値を見つけること、ノイズの減少、またはその構造などが可能性として挙げられます。
+* ADAMでは3つのバッファーを維持する必要がありますが、SGDでは2つのバッファーが必要です。数GBのサイズのモデルを訓練しない限り、これは実応用上は問題がありません。かえって、モデルはメモリに収まらない可能性があります。
+* 1つではなく2つのモメンタムパラメータを調整する必要があります。
-## [正規化レイヤー](https://www.youtube.com/watch?v=--NZb480zlg&t=3907s)
-最適化アルゴリズムを改善するより、*正規化レイヤー*はネットワーク構造自体も改善できます。 これらは、既存したレイヤーの間にある追加のレイヤーです。 目標は、最適化と一般化のパフォーマンスを向上させることです。
+## [正規化層](https://www.youtube.com/watch?v=--NZb480zlg&t=3907s)
+最適化アルゴリズムを改善するより、*正規化層*はネットワーク構造自体も改善できます。 これらは、既存の層の間に追加される層です。 目標は、最適化と汎化のパフォーマンスを向上させることです。
-ニューラルネットワークでは、通常、線性操作と非線性操作を交換して計算する場合があります。 非線形演算は、ReLUなどの活性化関数としてもよく知られているのでしょう。 正規化レイヤーは、線形レイヤーの前、または活性化関数の後に配置できます。 最も通用した方法は、次の図のように、線形層と活性化関数の間に正規化レイヤーを配置することです。
+ニューラルネットワークでは、通常、線性演算と非線性演算を交互に計算します。 非線形演算は、ReLUなどの活性化関数としてもよく知られています。 正規化層は、線形層の前、または活性化関数の後に配置できます。 最もよく行われる方法は、次の図のように、線形層と活性化関数の間に正規化層を配置することです。
|
|
|
|
-| (a) Before adding normalization | (b) After adding normalization | (c) An example in CNNs |
-(a) 正規化レイヤーを加えた前
-(b) 正規化レイヤーを加えた後
-(c) 畳み込みの一例
+
+(a) 正規化層を加えた前
+(b) 正規化層を加えた後
+(c) 畳み込みの例
-Figure 3: Typical positions of normalization layers.
-正規化レイヤーと一般的な置きかた
+図3: 正規化層の一般的な位置
+
-図3(c)では、畳み込みは線形層であり、その後にバッチ正規化がつながり、その後にReLUが出力です。
+図3(c)では、畳み込みは線形層であり、その後にバッチ正規化がつながり、その後にReLUが続きます。
-正規化レイヤーは流れるデータに影響を与えますが、重みを適切に設定されれば、正規化されたネットワークのパワーが同じく出力されたため、正規化されていないネットワークでも同じく正規化されたネットワークから出力したものも同じです。
+正規化層はネットワークを流れるデータに影響を与えますが、重みを適切に設定していれば、正規化されていないネットワークでも正規化されたネットワークと同じ出力を依然として出すことができるという意味で、正規化はネットワークの表現力を変化させることはありません。
-ここで、$ x $は入力ベクトル、$ y $は出力ベクトル、$ \ mu $は$ x $の平均の推定値、$ \ sigma $は$ x $の標準偏差(std)の推定値です。 、$ a $は学習可能なスケーリング係数であり、$ b $は学習可能なバイアス項です。
+ここで、$x$は入力ベクトル、$y$は出力ベクトル、$\mu$は$x$の平均の推定値、$\sigma$は$x$の標準偏差(std)の推定値です。 、$a$は学習可能なスケーリング係数であり、$b$は学習可能なバイアス項です。
-<!-調整できるパラメーター$ a $と$ b $がない場合、出力ベクトル$ y $の分布は平均値0と標準偏差値1に固定されます。スケーリング係数$ a $とバイアス項$ b $は、ネットワークの表現は維持できます。つまり、出力値は特定の範囲を超える可能性があります。$ a $と$ b$は学習可能なパラメーターであり、$ \ mu $と$ \ sigma $よりもはるかに安定しているため、正規化を逆算できないことを注意してください。
+学習可能パラメーターである$a$と$b$がない場合、出力ベクトル$y$の分布は平均0標準偏差値1に固定されます。スケーリング係数$a$とバイアス項$b$は、ネットワークの表現力は維持できます。つまり、出力値は特定の範囲を超える可能性があります。$a$と$b$は学習可能なパラメーターであり、$\mu$と$\sigma$よりもはるかに安定しているため、正規化を逆算できないことを注意してください。
![]({{site.baseurl}}/images/week05/05-2/5_2_norm_operations.png)
-Figure 4: 正規化操作明細
+図4: 正規化の操作の詳細
正規化をしようとするサンプルの選択方法に基づいて、入力ベクトルを正規化する方法はいくつかあります。
-図4は、高さ$ H $と幅さ$ W $の$ N $画像のミニバッチ数と$ C $チャネル数の、4つの異なる正規化アプローチを示しています。
+図4は、高さ$H$と幅さ$W$でチャネル数の$C$ミニバッチ数$N$の画像の4つの異なる正規化アプローチを示しています。
--*バッチ正規化*:正規化は入力の1つのチャネルにのみ適用されます。これは最初に提案されたよく知っているアプローチです。詳細は下記のリンクに、[ResNet 7のトレーニング方法:バッチノルム](https://myrtle.ai/how-to-train-your-resnet-7-batch-norm/)を読んでください。
--*レイヤー正規化*:正規化は、すべてのチャネルの1つの画像内に適用されます。
--*インスタンス正規化*:正規化は1つの画像と1つのチャネルにのみ適用されます。
--*グループ正規化*:正規化は1つの画像に多数のチャネルに適用されます。たとえば、チャネル0〜9は一括グループであり、チャネル10〜19は別のグループです。実際操作は、グループサイズは32とよく設定されます。これは、実際には優れたパフォーマンスを発揮し、SGDと競合しないため、AaronDefazioが推奨するアプローチです。
+- *バッチ正規化*:正規化が入力の1つのチャネルにのみ適用されます。これは最初に提案されたよく知られているアプローチです。詳細は[ResNet 7の訓練方法:バッチノルム](https://myrtle.ai/how-to-train-your-resnet-7-batch-norm/)を読んでください。
+- *レイヤー正規化*:正規化がすべてのチャネルの1つの画像内に適用されます。
+- *インスタンス正規化*:正規化が1つの画像と1つのチャネルにのみ適用されます。
+- *グループ正規化*:正規化が1つの画像の多数のチャネルに適用されます。たとえば、チャネル0〜9はひとまとまりのグループであり、チャネル10〜19は別のグループです。実応用上は、グループサイズは32によく設定されます。これは、実際には優れたパフォーマンスを発揮し、SGDと競合しないため、Aaron Defazioが推奨するアプローチです。
-実際には、バッチ正規化とグループ正規化はコンピュータビジョンの問題によく取り組まれ、レイヤー正規化とインスタンス正規化は言語の問題によく使用されます。
+実際には、バッチ正規化とグループ正規化はコンピュータビジョンの問題によく使われ、レイヤー正規化とインスタンス正規化は言語の問題によく使用されます。
-正規化が役立つのはなぜですか?
+### 正規化が役立つのはなぜですか?
-正規化は実際にはうまく使えますが、その有効性はあるかどうかについてまだ議論があります。もともとは、正規化は「内部共変量シフト」を減らすための提案でしたが、一部の学者は実験でそれが間違っていることを証明しました。にもかかわらず、正規化には明らかに次のいくつの要素が注目です。
+正規化は実際にはうまく機能しますが、その有効性があるかどうかについてはまだ議論があります。もともとは、正規化は「内部共変量シフト」を減らすための提案でしたが、一部の学者は実験でそれが間違っていることを証明しました。にもかかわらず、正規化では明らかに次のいくつの要素が組み合わされています。
--正規化レイヤーで備えたネットワークは最適化トレーニングするとより安くなり、より大きな学習率を使用できます。これで、ニューラルネットワークのトレーニングを高速化する最適化効果があります。
--バッチ内のサンプルのランダム性のため、平均/標準推定値にノイズがあります。この余分な「ノイズ」により、場合によってはモデル一般化の結果はよくなります。正規化には正則化効果があります。
--正規化により、重みの初期化に対する感知度が低下します。
+- 正規化層を備えたネットワークは最適化がより容易になり、より大きな学習率を使用できます。これによって、ニューラルネットワークの訓練を高速化する最適化効果があります。
+- バッチ内のサンプルのランダム性のため、平均/標準推定値にノイズがあります。この余分な「ノイズ」により、場合によってはモデル汎化性能がよくなります。正規化には正則化効果があります。
+- 正規化により、重みの初期化に対する感知度が低下します。
-その結果、正規化により、もっと「ケアフリー」になり - 条件がいかに悪いかを考慮せずに ほとんどすべてのニューラルネットワークのビルディングブロックスが組み合わせるのは注目であり、トレーニングする可能性が高くなるんです。
+その結果、正規化により、もっと「注意深くならなくてよく」なります。つまり、条件がいかに悪いかを考慮せずとも ほとんどすべてのニューラルネットワークのビルディングブロックスが組み合わせて高い訓練性を得ることができるのです。
-###実際操作の考慮
+### 実用上考慮すべき点
-バックプロパゲーション(バック伝播)は、平均と標準の計算し、また正規化の適用を通じて実現するのは重要です。そうでない場合、最適化トレーニングは分散してしまいます。バックプロパゲーションの計算はかなり難しく、エラーが発生しやすくなりますが、PyTorchは自動的に計算できるため、非常に役立ちます。 PyTorchの2つの正規化レイヤークラスを以下に示します。
+正規化の適用に加えて、平均と標準偏差計算した上でバックプロパゲーションを行うというのが重要です。そうしなければ、訓練が発散してしまうからです。バックプロパゲーションの計算はかなり難しく、エラーが発生しやすくなりますが、PyTorchは自動的に計算できるため、非常に役立ちます。 PyTorchの2つの正規化層クラスを以下に示します。
-`` `python
+```python
torch.nn.BatchNorm2d(num_features、...)
torch.nn.GroupNorm(num_groups、num_channels、...)
-`` `
+```
-バッチ正規化は最初に開発された方法であり、最もよく知っていますが、** Aaron Defazioは、代わりにグループ正規化**を使用することをお勧めします。より安定していて、理論的には単純で、よく効くといわれています。グループサイズ32が適切な初期値でよいでしょう。
+バッチ正規化は最初に開発された方法であり、最もよく知られていますが、**Aaron Defazio(講師)は、代わりにグループ正規化**を使用することをお勧めします。より安定していて、理論的には単純で、よく効くといわれています。グループサイズ32が適切な初期値でよいでしょう。
-バッチ正規化とインスタンス正規化の場合、複数のトレーニングサンプルを正規化するため、トレーニングしたあと使用される平均/標準はネットワークが評価されるたびに再計算されるのではなく定数となります。それに対して、グループ正規化とレイヤー正規化は単一サンプルで正規化されるため必要ありません。
+バッチ正規化とインスタンス正規化の場合、複数の訓練サンプルを正規化するため、訓練したあと使用される平均/標準偏差はネットワークが評価されるたびに再計算されるのではなく定数となります。それに対して、グループ正規化とレイヤー正規化は単一サンプルで正規化されるため必要ありません。
## [最適化の死](https://www.youtube.com/watch?v=-NZb480zlg&t=4817s)
-時々、何も知らない業界に関する知識について、現在やっていることをどうやって改善できるかって割り込めます。そのような例の1つは、磁気共鳴画像法(MRI)の画像の再構成を加速するためディープニューラルネットワークの使用のです。
+時々、自分が何も知らない業界に入り込んで、そこ現在やっていることを改善することができます。そのような例の1つは、磁気共鳴画像法(MRI)の画像の再構成を加速するためのディープニューラルネットワークの使用です。
![]({{site.baseurl}}/images/week05/05-2/5_2_conv_xkcd.png)
-Figure 5: Sometimes it actually works!
+図5: うまくいくことがある!
-### 磁気共鳴画像法(MRI)再構成
+### 磁気共鳴画像(MRI)再構成
-従来のMRI再構成問題では、生データがMRI装置から取得され、単純なパイプライン/アルゴリズムを使用して画像が再構成されます。 MRI装置は、1行または1列を数ミリ秒ごとに2次元フーリエドメインでデータをキャプチャします。この生データは、周波数と位相チャネルにある各自の正弦波の幅が構成されます。簡単に言えば、それは実数と虚数のチャネルを同時に持つ複素数の画像のことです。この入力に逆フーリエ変換を適用すると、つまり、すべて付けされたの正弦波の値の重みを合計すると、元の解剖学的画像を取得できます。
+従来のMRI再構成問題では、生データがMRI装置から取得され、単純なパイプライン/アルゴリズムを使用して画像が再構成されます。 MRI装置は、1行または1列を数ミリ秒ごとに2次元フーリエドメインでデータを取得します。この生データは周波数と位相チャネルにある各自のサイン波の幅から構成されています。簡単に言えば、それは実数と虚数のチャネルを同時に持つ複素数の画像のことです。この入力に逆フーリエ変換を適用すると、つまり、サイン波の値の重みを合計すると、元の解剖学的画像を取得することができます。
![]({{site.baseurl}}/images/week05/05-2/5_2_mri.png)
-Fig. 6: MRI reconstruction
+図6: MRIの再構成
-現在、画像の大きさを問わず、フーリエ領域から画像領域に移動するための線形マッピングが存在し、数ミリ秒以内にかかる非常に効率的にやっています。しかし、これはより速く生成できるのか問題です。
+現在、画像の大きさを問わず、フーリエ領域から画像領域に移動するための線形写像が存在しますが、これは非常に効率的です。文字通り数ミリ秒以内で行われます。しかし、これはより速く生成できるのか問題です。
-###生成加速化MRI
+### 生成加速化MRI
-解決する問題は加速MRIです。加速というのは、MRI再構成プロセスをどうやって高速化にするのです。マシンをより高速に運行し、それでもほぼ同じ品質の画像を生成できるようにしたいと考えています。1つの方法であり、またこれまで最も成功した方法は、MRIスキャンからすべての列をキャプチャしないこととの考えでした。それは、画像の真ん中に多くの情報が含まれているのが、画像のフレーム周囲にはランダムにスキップできるようにするのです。そうすると、問題として、線性マッピングで画像を再構築するのはできなくなってしまいます。図7の右端の画像は、サブサンプリングされたフーリエ空間に適用された線性マッピングの出力を示しています。ここで見えますように、この方法ではあまり有用な出力量が得られなりません。明らかにもう少しインテリジェント的にやって改善する余地があるようです。
+解決する問題は加速MRIです。加速というのは、MRI再構成プロセスをどうやって高速化にするのかです。マシンをより高速に運行し、それでもほぼ同じ品質の画像を生成できるようにしたいと考えています。1つの方法であり、またこれまで最も成功した方法は、MRIスキャンからすべての列をキャプチャしないという考えでした。そこでは、画像のいくつかのランダムにスキップすのですが、画像の真ん中に多くの情報が含まれているため、これは実用上は役に立ちます。しかしそうすると、問題として、線形写像で画像を再構築するのはできなくなってしまいます。図7の右端の画像は、サブサンプリングされたフーリエ空間に適用された線形写像の出力を示しています。ここからわかるように、この方法ではあまり有用な出力量が得られません。明らかにもう少し賢くやって改善する余地がありそうです。
![]({{site.baseurl}}/images/week05/05-2/5_2_acc_mri.png)
-Fig.: Linear mapping on subsampled Fourier-space
+図7: サブサンプルされたフーリエ空間上の線形写像
@@ -298,19 +298,19 @@ The new problem that needs to be solved is accelerated MRI, where by acceleratio
One of the biggest breakthroughs in theoretical mathematics for a long time was compressed sensing. A paper by Candes et al. showed that theoretically, we can get a perfect reconstruction from the subsampled Fourier-domain image. In other words, when the signal we are trying to reconstruct is sparse or sparsely structured, then it is possible to perfectly reconstruct it from fewer measurements. But there are some practical requirements for this to work -- we don't need to sample randomly, rather we need to sample incoherently -- though in practice, people just end up sampling randomly. Additionally, it takes the same time to sample a full column or half a column, so in practice we also sample entire columns.
Another condition is that we need to have *sparsity* in our image, where by sparsity we mean a lot of zeros or black pixels in the image. The raw input can be represented sparsely if we do a wavelength decomposition, but even this decomposition gives us an approximately sparse and not an exactly sparse image. So, this approach gives us a pretty good but not perfect reconstruction, as we can see in Figure 8. However, if the input were very sparse in the wavelength domain, then we would definitely get a perfect image. -->
-###圧縮センシング
+### 圧縮センシング
-理論数学における最大の進歩の1つは、圧縮センシングでした。 Candes et al。この論文は、理論的には、サブサンプリングされたフーリエドメインの画像から完全な再構成を取得できることを示しています。 。言い換えると、再構築しようとしている画像がスパースまたはスパース構造である場合、より少ない数値で完全に再構築することが可能です。しかし、これが効くためいくつかの実際操作に関する要件があります-ランダムにサンプリングする必要はなく、まとまってないサンプリングする必要があります-実際には、ランダムにサンプリングすることになります。さらに、列の全体ををサンプリングする時間はその列の半分に同じくかかるので、実際には列全体もサンプリングします。
+理論数学における最大の進歩の1つは、圧縮センシングでした。 Candes et al。この論文は、理論的には、サブサンプリングされたフーリエドメインの画像から完全な再構成を取得できることを示しています。言い換えると、再構成しようとしている画像がスパースまたはスパースな構造である場合、より少ない数値で完全に再構築することが可能であるということです。しかし、これが効くためいくつかの実用上の制約があります。具体的には、ランダムサンプリングする必要はなく、まとまってないようにサンプリングする必要があります。実際には、ランダムにサンプリングされている場合が多いですが。さらに、列の全体ををサンプリングする時間はその列の半分と同じくらいかかるので、実際には列全体もサンプリングします。
-もう1つの条件は、画像に*スパース性*が必要であるということです。スパース性とは、画像内に多数のゼロの値または黒いピクセルを意味します。波長分解を行うと、生の入力はスパース的に表現できるようになります。だが、この分解でも、正確にきっちりとしたスパースな画像ではなく、ほぼスパースなものです。したがって、このアプローチでは、図8に示すように、完全的に再構成されないがかなり良い程度で得られます。ただし、波長ドメインに見えた入力データが非常にスパースとなると、間違いなく完全な再構成画像が得られます。
+もう1つの条件は、画像に*スパース性*が必要であるということです。スパース性とは、画像内に多数のゼロの値または黒いピクセルがあることを意味します。波長分解を行うと、生の入力はスパースに表現できるようになります。しかし、この分解でも、正確にきっちりとしたスパースな画像ではなく、ほぼスパースなものになります。したがって、このアプローチでは、図8に示すように、完全に再構成されないもののかなり良い程度の再構成が得られます。ただし、波長ドメインに見えた入力データが非常にスパースであるなら、間違いなく完全な再構成画像が得られます。
![]({{site.baseurl}}/images/week05/05-2/5_2_comp_sensing.png)
-Figure 8: Compressed sensing
+図8: 圧縮センシング
-圧縮センシングの原理は、最適化の理論に基づいた方法です。 この再構成を取得する方法は、正則化項が追加されたミニ最適化問題を解くことです。
+圧縮センシングの原理は、最適化の理論に基づいた方法です。 この再構成を取得する方法は、正則化項が追加された小さな最適化問題を解くことです。
$$
\hat{x} = \arg\min_x \frac{1}{2} \Vert M (\mathcal{F}(x)) - y \Vert^2 + \lambda TV(x)
@@ -319,16 +319,16 @@ $$
-ここで、$ M $は非サンプリングのデータがを排除するマスク関数、$ \ mathcal {F} $はフーリエ変換、$ y $はフーリエで変換されたデータ、$ \ lambda $は正則化ペナルティ強度、 $ V $は正則化関数です。
+ここで、$M$はサンプリングされていないデータを排除するマスク関数、$\mathcal{F}$はフーリエ変換、$y$はフーリエで変換されたデータ、$\lambda$は正則化ペナルティ係数、 $V$は正則化関数です。
-よってこの最適化問題を解決するのは、MRIスキャンのタイムステップごとに、または各「スライス」されたタイムごとに対して、MRI自体のスキャンタイムより時間が長くかかることになること。 これでより良いスキャン方法が見つける理由です。
+よってこの最適化問題は、MRIスキャンのタイムステップごとに、または各「スライス」されたタイムごとに対して解かれなければなりません。これは、MRI自体のスキャンタイムより長い時間がかかることになります。この制約が、より良い方法を見つける理由になっています。
-###最適化するのはいつ導入されますか?
+### 最適化はいつ必要なんですか?
-各タイムステップで小さな最適化問題を解く代わりに、大きなニューラルネットワークを使用して解決するほうがいいんじゃないですか?という質問がわいてきますと、それは、各タイムステップで最適化問題を解くことより十分な複雑さでニューラルネットワークをトレーニングして最適化問題を1つのステップで本質的に解決できるのはお得なんだからです。
+各タイムステップで小さな最適化問題を解く代わりに、大きなニューラルネットワークを使用して解決するほうがいいんじゃないですか?という質問がわいてくるかもしれません。各タイムステップで最適化問題を解くことより十分な複雑さでニューラルネットワークを訓練して最適化問題を1つのステップで本質的に解決できるのは得だからです。
$$
@@ -338,15 +338,15 @@ $$
-ここで、$ B $は深層学習モデルであり、$ y $はフーリエ変換されたデータです。
+ここで、$B$は深層学習モデルであり、$y$はフーリエ変換されたデータです。
15年前は、このアプローチは困難でしたが、現在では、これを導入する方が簡単になります。 図9は、この問題に対する深層学習アプローチの結果を示しています。出力は圧縮センシングアプローチよりとても優れており、実際のスキャンと非常によく似ていることがわかります。
![]({{site.baseurl}}/images/week05/05-2/5_2_dl_approach.png)
-Figure 9: Deep Learning approach
+図9: 深層学習のアプローチ
-この再構成の生成に使用されるモデルは、ADAMオプティマイザー、グループ正規化レイヤー、およびU-Netベースの畳み込みニューラルネットワークの組み合わせです。このようなアプローチは実際のアプリケーションの環境に非常に近く、このような加速されたMRIスキャンが数年以内に臨床診療で行われるように期待しています。
+この再構成の生成に使用されるモデルは、ADAMオプティマイザー、グループ正規化層、およびU-Netベースの畳み込みニューラルネットワークの組み合わせです。このようなアプローチは実際の応用の環境に非常に近く、このような加速されたMRIスキャンが数年以内に臨床診療で行われることを期待しています。
diff --git a/docs/ja/week05/05-3.md b/docs/ja/week05/05-3.md
index ac260e562..9969c44ed 100644
--- a/docs/ja/week05/05-3.md
+++ b/docs/ja/week05/05-3.md
@@ -15,65 +15,64 @@ translator: Jesmer Wong
In this part we will discuss convolution, since we would like to explore the sparsity, stationarity, compositionality of the data.
-Instead of using the matrix $A$ discussed in the [previous week]({{site.baseurl}}/en/week04/04-1), we will change the matrix width to the kernel size $k$. Therefore, each row of the matrix is a kernel. We can use the kernels by stacking and shifting (see Fig 1). Then we can have $m$ layers of height $n-k+1$. -->
-## [1次元畳み込みを理解する](https://www.youtube.com/watch?v=eEzCZnOFU1w&t=140s)
+Instead of using the matrix$A$discussed in the [previous week]({{site.baseurl}}/en/week04/04-1), we will change the matrix width to the kernel size$k$. Therefore, each row of the matrix is a kernel. We can use the kernels by stacking and shifting (see 図1). Then we can have$m$layers of height$n-k+1$. -->
+## [1次元畳み込みを理解する](https://www.youtube.com/watch?v=eEzCZnOFU1w&t=140s)
+データのスパース性、定常性、構成性を議論したいので、このパートでは、畳み込みについて説明します。
-この文では、データのスパース性、定常性、構成性を通りに、畳み込みについて説明します。
-
-[前の週]({{site.baseurl}} / en / week04 / 04-1)で説明したマトリックス$ A $を使用する代わりに、マトリックスの幅をカーネルサイズ$ k $に変更します。 したがって、マトリックスの各行はカーネルです。 スタックやシフトでカーネルを使用できます(図1を参照)。 次に、高さ$ n-k + 1 $の$ m $レイヤーを作成できます。
+[前の週]({{site.baseurl}}/ja/week04/04-1) で説明した行列$A$を使用する代わりに、行列の幅をカーネルサイズ$k$に変更します。 したがって、行列の各行はカーネルです。 スタックやシフトでカーネルを使用できます(図1を参照)。 すると、高さ$n-k + 1$の層を$m$層を作成できます。
![1]({{site.baseurl}}/images/week05/05-3/Illustration_1D_Conv.png)
-
-Fig 1: 1次元畳み込みの示例
+
+図1: 1次元畳み込みの例
-
-出力は、サイズ$ n-k + 1 $の$ m $の厚さでのベクトルです。
+
+出力は、サイズ$n-k + 1$の厚さ$m$のベクトルです。
![2]({{site.baseurl}}/images/week05/05-3/Result_1D_Conv.png)
-
-Fig 2: 1次元畳み込みの結果
+
+図2: 1次元畳み込みの結果
-さらに、単一の入力ベクトルは単頻信号と見なすことができます。
+さらに、単一の入力ベクトルは単旋律の信号と見なすことができます。
![3]({{site.baseurl}}/images/week05/05-3/Monophonic_Signal.png)
-
-Fig 3: 単頻信号
+
+図3: 単旋律の信号
-Now, the input $x$ is a mapping
-では、入力$x$ はマッピングであり
+
+今、入力$x$は写像です
$$
x:\Omega\rightarrow\mathbb{R}^{c}
$$
-
-ここで、$ \ Omega = \ lbrace 1、2、3、\ cdots \ rbrace \ subset \ mathbb {N} ^ 1 $(これは$ 1 $次元の信号/ $ 1 $次元のドメインがあるので)この場合はチャネル数$ c $は$ 1 $です。 $ c = 2 $の場合、これはステレオ(多頻)信号になります。
+
+ここで、$\Omega = \lbrace 1, 2, 3, \cdots \rbrace \subset \mathbb {N}^1$(これは$1$次元の信号です。なぜなら$1$次元のドメインがあるからです。)で、この場合はチャネル数$c$は$1$です。$c = 2$の場合、これはステレオ(複旋律)信号になります。
-For the 1D convolution, we can just compute the scalar product, kernel by kernel (see Fig 4).
-1D畳み込みの場合、カーネルごとにスカラー積で計算します(図4を参照)。
+
+1次元畳み込みの場合、カーネルごとにスカラー積で計算します(図4を参照)。
![4]({{site.baseurl}}/images/week05/05-3/Layer_by_layer_scalar_product.png)
-
-Fig 4: レイヤーごとにスカラー積での畳み込み
+
+図4: 層ごとにスカラー積での畳み込み
-[PyTorchでカーネルのサイズと出力幅のアクセス](https://www.youtube.com/watch?v=eEzCZnOFU1w&t=1095s)
+[PyTorchにおけるカーネルと出力幅の次元](https://www.youtube.com/watch?v=eEzCZnOFU1w&t=1095s)
-ヒント:IPythonで***?***を使用して、関数のドキュメントにアクセスできます。 例えば、
+ヒント:IPythonでは ***?*** を使用して、関数のドキュメントにアクセスできます。 例えば、
```python
Init signature:
@@ -93,10 +92,10 @@ nn.Conv1d(
-1D畳み込み
+We have$1$dimensional convolution going from$2$channels (stereophonic signal) to$16$channels ($16$kernels) with kernel size of$3$and stride of$1$. We then have$16$kernels with thickness$2$and length$3$. Let's assume that the input signal has a batch of size$1$(one signal),$2$channels and$64$samples. The resulting output layer has$1$signal,$16$channels and the length of the signal is$62$($=64-3+1$). Also, if we output the bias size, we'll find the bias size is$16$, since we have one bias per weight. -->
+1次元畳み込み
-カーネルサイズは$ 3 $、ストライドは$ 1 $で、$ 1 $次元の畳み込みを$ 2 $チャネル(ステレオ信号)から$ 16 $チャネル($ 16 $カーネル)へ変換します。次は、厚さが$ 2 $、長さが$ 3 $の$ 16 $カーネルで接触されます。仮に入力信号のバッチがサイズ$ 1 $(1つの信号)であり、チャネル数は$ 2 $、サンプル数は$ 64 $でありますと、出力レイヤーの信号数は$ 1 $、チャネル数は$ 16 $、信号の長さは$ 62 $($ = 64-3 + 1 $)となります。また、バイアスサイズも出力すると、重みごとに1つのバイアスがあるため、バイアスサイズは$ 16 $であることがわかります。
+カーネルサイズは$3$、ストライドは$1$で、$1$次元の畳み込みを$2$チャネル(ステレオ信号)から$16$チャネル($16$カーネル)へ変換します。次は、厚さが$2$、長さが$3$の$16$カーネルが続きます。仮に入力信号のバッチサイズが$1$(1つの信号)であり、チャネル数は$2$、サンプル数は$64$とすると、出力層の信号数は$1$、チャネル数は$16$、信号の長さは$62$($= 64-3 + 1$)となります。また、バイアスのサイズも出力すると、重みごとに1つのバイアスがあるため、バイアスのサイズは$16$であることがわかります。
```python
conv = nn.Conv1d(2, 16, 3) # 2 channels (stereo signal), 16 kernels of size 3
@@ -113,10 +112,10 @@ conv(x).size() # output: torch.Size([1, 16, 60])
-2D畳み込み
+We first define the input data as$1$sample,$20$channels (say, we're using an hyperspectral image) with height$64$and width$128$. The 2D convolution has$20$channels from input and$16$kernels with size of$3 \times 5$. After the convolution, the output data has$1$sample,$16$channels with height$62$($=64-3+1$) and width$124$($=128-5+1$). -->
+2次元畳み込み
-入力データを、高さ$ 64 $、幅$ 128 $の$ 1 $サンプル、$ 20 $チャネル(たとえば、ハイパースペクトル画像を使用)だとして、 2D畳み込みには、入力からの$ 20 $チャネルと、サイズが$ 3 \ times 5 $の$ 16 $カーネルがあります。 畳み込み後、出力データには$ 1 $サンプル、高さ$ 62 $($ = 64-3 + 1 $)、幅$ 124 $($ = 128-5 + 1 $)の$ 16 $チャネルがあります。
+入力データを、高さ$64$、幅$128$の$1$サンプル、$20$チャネル(たとえば、ハイパースペクトル画像を使用)だとします。2次元畳み込みは、入力からの$20$チャネルと、サイズが$3 \times 5$の$16$カーネルです。 畳み込み後、出力データには$1$サンプル、高さ$62$($= 64-3 + 1$)、幅$124$($= 128-5 + 1$)の$16$チャネルがあります。
```python
x = torch.rand(1, 20, 64, 128) # 1 sample, 20 channels, height 64, and width 128
@@ -125,8 +124,8 @@ conv.weight.size() # output: torch.Size([16, 20, 3, 5])
conv(x).size() # output: torch.Size([1, 16, 62, 124])
```
-
-次元数が維持できると実現したい場合は、パディングを使用できます。上記により、畳み込み関数に新しいパラメーター `stride = 1`と` padding =(1、2) `を追加できます。これは、$ y $方向に$ 1 $(上部に$ 1 $、底部に$ 1 $)を意味します。 下)と$ x $方向の$ 2 $。 その場合、出力信号のサイズは入力信号のサイズと同じです。 2D畳み込みを実行するときにカーネルの関数を保存するために必要な次元の数は$ 4 $です。
+
+次元数が維持したい場合は、パディングを使用することができます。上記により、畳み込み関数に新しいパラメーター `stride = 1`と` padding =(1、2) `を追加できます。これは、$y$方向に$1$(上部に$1$、底部に$1$)と$x$方向に$2$を意味します。 その場合、出力信号のサイズは入力信号のサイズと同じです。 2次元畳み込みを実行するときにカーネルの関数を保存するために必要な次元の数は$4$です。
```python
# 20 channels, 16 kernels of size 3 x 5, stride is 1, padding of 1 and 2
@@ -139,30 +138,30 @@ conv(x).size() # output: torch.Size([1, 16, 64, 128])
In this section we're going to ask torch to check all the computation over the tensors so that we can perform the computation of partial derivatives.
-- Create a $2\times2$ tensor $\boldsymbol{x}$ with gradient-accumulation capabilities;
-- Deduct $2$ from all elements of $\boldsymbol{x}$ and get $\boldsymbol{y}$; (If we print `y.grad_fn`, we will get ``, which means that `y` is generated by the module of subtraction $\boldsymbol{x}-2$. Also we can use `y.grad_fn.next_functions[0][0].variable` to derive the original tensor.)
-- Do more operations: $\boldsymbol{z} = 3\boldsymbol{y}^2$;
-- Calculate the mean of $\boldsymbol{z}$. -->
-## [自動勾配降下の仕組み](https://www.youtube.com/watch?v=eEzCZnOFU1w&t=1634s)
+- Create a$2\times2$tensor$\boldsymbol{x}$with gradient-accumulation capabilities;
+- Deduct$2$from all elements of$\boldsymbol{x}$and get$\boldsymbol{y}$; (If we print `y.grad_fn`, we will get ``, which means that `y` is generated by the module of subtraction$\boldsymbol{x}-2$. Also we can use `y.grad_fn.next_functions[0][0].variable` to derive the original tensor.)
+- Do more operations:$\boldsymbol{z} = 3\boldsymbol{y}^2$;
+- Calculate the mean of$\boldsymbol{z}$. -->
+## [自動微分の仕組み](https://www.youtube.com/watch?v=eEzCZnOFU1w&t=1634s)
-この文は、偏導関数を計算するように、PyTorchでテンソルすべての次元の計算をチェックするように依頼します。
+このセクションでは、偏微分を計算するように、PyTorchのテンソルにすべての計算をチェックするように依頼します。
--勾配積算機能を備えた$ 2 \ times2 $テンソル$ \ boldsymbol {x} $を作成します。
--$ \ boldsymbol {x} $のすべての座標値から$ 2 $を差し引き、$ \ boldsymbol {y} $を取ります。 ( `y.grad_fn`を出力すると、` `が得られます。つまり、` y`は減算$ \ boldsymbol {x} -2 $のモジュールによって生成されます。`を使用することもできます。また、 y.grad_fn.next_functions [0] [0] .variable`を使用して、元のテンソルを導出します。)
--次の操作は:$ \ boldsymbol {z} = 3 \ boldsymbol {y} ^ 2 $;
--$ \ boldsymbol {z} $の平均を計算します。
+- 勾配を蓄積する機能を備えた$2 \times2$テンソル$\boldsymbol {x}$を作成します。
+- $\boldsymbol {x}$のすべての座標値から$2$を差し引き、$\boldsymbol {y}$を取ります。 ( `y.grad_fn`を出力すると、` `が得られます。つまり、` y`は減算$\boldsymbol {x} -2$のモジュールによって生成されます。また、`y.grad_fn.next_functions [0] [0] .variable`を使用して、元のテンソルを導出することもできます。)
+- 次の操作は:$\boldsymbol {z} = 3 \boldsymbol {y} ^ 2$;
+- $\boldsymbol {z}$の平均を計算します。
![5]({{site.baseurl}}/images/week05/05-3/Flow_Chart.png)
-Fig 5: Flow Chart of the Auto-gradient Example
+図5: 自動微分の例のフローチャート
-
-バックプロパゲーション(バック伝播)は、勾配の計算に使用されます。 この例では、バックプロパゲーションのプロセスは、勾配$ \ frac {d \ boldsymbol {a}} {d \ boldsymbol {x}} $を計算するもので見えるでしょう。検証として$ \ frac {d \ boldsymbol {a}} {d \ boldsymbol {x}} $をマニュアルで計算した後、ʻa.backward() `で計算した値は* x.grad *の値同じだとわかります。
+バックプロパゲーションは、勾配の計算に使用されます。 この例では、バックプロパゲーションのプロセスは、勾配$\frac {d \boldsymbol {a}} {d \boldsymbol {x}}$を計算するものと見ることができるでしょう。検証として$\frac {d \boldsymbol {a}} {d \boldsymbol {x}}$を手動で計算したすると、`a.backward()`で計算した*x.grad*の値は、私たちの手動による計算の結果と同じだとわかります。
-マニュアルでバックプロパゲーションを計算するプロセスは次のとおりです。
+手動でバックプロパゲーションを計算するプロセスは次のとおりです。
$$
\begin{aligned}
@@ -175,16 +174,16 @@ x &= \begin{pmatrix} 1&2\\3&4\end{pmatrix} \\
$$
-PyTorchで偏導関数を使用する場合、常に元のデータと同じ次元数が得られます。 しかし、正しいヤコビ行列は転置されます。
+PyTorchで偏微分を使用する場合、常に元のデータと同じ次元数が得られます。 しかし、正しいヤコビ行列は転置されたものになります。
-###基本的なものから展開すると
+Now we have a$1\times3$vector$x$, assign$y$to the double$x$and keep doubling$y$until its norm is smaller than$1000$. Due to the randomness we have for$x$, we cannot directly know the number of iterations when the procedure terminates. -->
+### 基本的なものから変わったものへ
-これで、$ 1 \ times3 $ベクトル$ x $して、$ y $をダブル$ x $に割り当て、ノルムが$ 1000 $より小さくなるまで$ y $を2倍にやり続けます。
-$ x $にはランダム性があるため、反復回数計算はいつか終わるって簡単にわかりません。
+これで、$1 \times3$ベクトル$x$を手に入れ、$y$をダブル$x$に割り当て、ノルムが$1000$より小さくなるまで$y$を2倍し続けます。
+$x$にはランダム性があるため、反復数計算はいつ終わるかは簡単にはわかりません。
```python
x = torch.randn(3, requires_grad=True)
@@ -209,8 +208,8 @@ print(i)
9
```
-
-推測に関しては、以下に示すように、 `requires_grad = True`を使用して、勾配の蓄積を追跡することパラメータを付けます。 $ x $または$ w $の宣言で `requires_grad = True`を省略し、$ z $で` backward() `を呼び出すと、$ x $と$ w $の勾配がいっさい積算されてないため、ランタイムエラーが発生します。
+
+推測に関しては、以下に示すように、 `requires_grad = True`を使用して、勾配の蓄積を追跡したいというラベルをつけます。$x$または$w$の宣言で `requires_grad = True`を省略し、$z$で` backward() `を呼び出すと、$x$と$w$の勾配がいっさい積算されてないため、ランタイムエラーが発生します。
```python
# Both x and w that allows gradient accumulation
@@ -222,7 +221,7 @@ print(x.grad, w.grad, sep='\n')
```
-また、`with torch.no_grad()`で勾配積算が省略できます。
+また、`with torch.no_grad()`で勾配の蓄積が省略できます。
```python
x = torch.arange(1., n + 1)
@@ -247,13 +246,13 @@ Also, instead of basic numerical operations, we can generate our own self-define
To do so, we need to inherit `torch.autograd.Function` and override `forward()` and `backward()` functions. For example, if we want to training nets, we need to get the forward pass and know the partial derivatives of the input respect to the output, such that we can use this module in any kind of point in the code. Then, by using back-propagation (chain rule), we can plug the thing anywhere in the chain of operations, as long as we know the partial derivatives of the input respect to the output.
In this case, there are three examples of ***custom modules*** in the *notebook*, the `add`, `split`, and `max` modules. For example, the custom addition module: -->
-##その他-カスタマイズ勾配値
+## その他:勾配値をカスタマイズする
-また、基本的な数値演算の代わりに、ニューラルグラフに導入できる自己定義モジュール/関数を生成できます。 Jupyter Notebookは[ここ](https://github.com/Atcold/pytorch-Deep-Learning/blob/master/extra/b-custom_grads.ipynb)にあります。
+また、基本的な数値計算の代わりに、ニューラルグラフに導入できる自己定義モジュール/関数を生成 することができます。 Jupyter Notebookは[ここ](https://github.com/Atcold/pytorch-Deep-Learning/blob/master/extra/b-custom_grads.ipynb)にあります。
-そのためには、 `torch.autograd.Function`のクラスを受け継ぎ、` forward() `関数と` backward() `関数を上書きする必要があります。 たとえば、ネットをトレーニングする場合は、フォワードパスの数を取得し、出力に関する入力の偏導関数を知ってから、コード内の任意にこの新モジュールが使用できるようにする必要があります。 次に、出力に対する入力の偏導関数がわかっている限り、バックプロパゲーション(チェーンルール)を使って、チェーンに任意のところにも導入できます。
+そのためには、 `torch.autograd.Function`のクラスを継承し、` forward() `関数と` backward() `関数を上書きする必要があります。 たとえば、ネットワークを訓練する場合は、フォワードパスを取得し、出力に関する入力の偏微分を知ることで、コード内の任意の箇所でこの新モジュールが使用できるようにする必要があります。 すると、出力に対する入力の偏微分がわかっている限り、バックプロパゲーション(チェーンルール)を使って、連鎖した演算の任意のところにも何かしら導入することができます。
-この場合、*ノートブック*には***カスタムモジュール***の3つの例、「add」、「split」、および「max」モジュールがあります。 たとえば、カスタム追加モジュールは次のとおりです。
+この場合、*ノートブック*には***カスタムモジュール***の3つの例、「add」、「split」、および「max」モジュールがあります。 たとえば、カスタム加算モジュールは次のとおりです。
```python
# Custom addition module
@@ -278,7 +277,7 @@ class MyAdd(torch.autograd.Function):
-2つ追加して出力を取得する場合は、このようにフォーワードパス関数を上書きする必要があります。 そして、バックプロパゲーションを行うために降りると、勾配が両側にコピーされます。 そのため、バックワード関数をコピーして上書きします。
+For `split` and `max`, see the code of how we overwrite forward and backward functions in the *notebook*. If we come from the same thing and **Split**, when go down doing gradients, we should add / sum them. For `argmax`, it selects the index of the highest thing, so the index of the highest should be$1$while others being$0$. Remember, according to different custom modules, we need to overwrite its own forward pass and how they do gradients in backward function. -->
+2つの和を計算して出力を取得する場合は、このようにフォーワードパス関数を上書きする必要があります。 そして、バックプロパゲーションを行うために計算グラフを降っていくと、勾配が両側にコピーされます。 そのため、バックワード関数をコピーして上書きします。
-`split`と` max`については、*ノートブック*のフォーワードパス関数とバックワードパス関数を上書きする方法のコードを参照してください。 同じものと**分割**から来た場合、勾配をコピーしてから加算/合計する必要があります。 ʻargmax`の場合、最も高い値に対応するインデックスを選択するため、最も高い値に属したインデックスは$ 1 $で、他のインデックスは$ 0 $のようにカスタマイズする必要があります。 さまざまなカスタムモジュールに応じて、各自のフォワードパスと、バックワード関数での勾配の実行方法を上書きする必要があることを忘れないでください。
+`split`と` max`については、*ノートブック*のフォーワードパス関数とバックワードパス関数を上書きする方法のコードを参照してください。 **Split**と同じものから来た場合、勾配をコピーしてから加算/合計する必要があります。 `argmax`の場合、最も高い値に属したインデックスは$1$で、他のインデックスは$0$のように、最も高い値に対応するインデックスを選択します。さまざまなカスタムモジュールに応じて、各自のフォワードパスと、バックワード関数での勾配の実行方法を上書きする必要があることを忘れないでください。
diff --git a/docs/ja/week05/05.md b/docs/ja/week05/05.md
index 8ebd94d92..d5318b5f6 100644
--- a/docs/ja/week05/05.md
+++ b/docs/ja/week05/05.md
@@ -9,29 +9,29 @@ translator: Jesmer Wong
---
-##講義 第一部分
+## レクチャーパートA
-まず、勾配降下法を紹介します。これをパットの考えについて説明し、ステップサイズでどうやって回答が求められるのか、その重要な役割を果たす方法についても説明します。次に、確率的勾配降下法について説明し、フルバッチ勾配降下法と比べてそのパフォーマンスに説明します。最後に、動量アップデート、特に2つの更新ルール、この更新ルールの直感の考えと収束への影響について説明します。
+まず、勾配降下法を紹介します。この直観的な説明をした後で、解に辿り着くためにステップサイズがどのようにして重要な役割を果たすのかについて話します。次に、確率的勾配降下法について説明し、そのパフォーマンスをフルバッチ勾配降下法と比較します。最後に、モメンタム更新、特に2つの更新則、そしてこの更新則の裏側にある直観と収束への影響について説明します。
-##講義 第二部分
+## レクチャーパートB
-RMSpropやADAMなどの確率的勾配降下法の最適化方法について説明します。 また、正規化レイヤーとそれらがニューラルネットワークのトレーニングプロセスに与える影響についても説明します。 最後に、業界の例としてMRIスキャンをより高速かつ効率的にするために使用されたニューラルネットについて説明します。
+RMSpropやADAMなどの確率的勾配降下法の適応的な方法について説明します。 また、正規化層とそれらがニューラルネットワークの訓練プロセスに与える影響についても説明します。最後に、実世界の例としてMRIスキャンをより高速かつ効率的にするために使用されたニューラルネットについて説明します。
-<~-- ## Practicum -->
-実習
+ -->
+## 演習
-マトリクスの乗算を簡単に確認してから、畳み込みについて説明します。
-ポイントは、たたみとシフトとのカーネルを使用することです。
+行列積を簡単に確認してから、畳み込みについて説明します。
+ポイントは、スタックとシフトによってカーネルを用いることです。
-まずは1D畳み込みを手作業で理解し、次にPyTorchで使って、カーネルの次元と1Dおよび2D畳み込みの例の出力幅を学習して、。 さらに、PyTorchを使用して、自動勾配降下法の原理とカスタマイズした勾配について学習します。
+まずは1次元畳み込みを手作業で理解し、次にPyTorchを使って、カーネルの次元と1次元および2次元の畳み込みの例について学びます。 さらに、PyTorchを使用して、自動微分の原理とカスタマイズした勾配について学習します。