前回は応用数学や機械学習につてい振り返ったので、今回は深層学習について振り返ります。おそらく長くなりそうなので2分割しようと思います。
まずは全結合型ニューラルネットワーク(Fully Connected Neural Network, FCNN)についてです。
- 入力層、隠れ層、出力層から構成され各層の全てのノードが前の層の全てのノードに重み付きの接続をしている。
- 前向き伝播 (Forward Propagation):各ニューロンの出力は、前層の出力、重み、バイアスに基づいて計算され、活性化関数を通過する。活性化関数については後述します。
- 誤差逆伝播 (Backpropagation):出力層の予測値と実際の値との差を計算し、その差を用いて重みを更新する。連鎖律を用いて各重みに対する誤差の勾配を計算し、勾配降下法等を使用して重みを更新する。
- 問題点と解決策
- 過剰適合:機械学習と同様、正則化(L1、L2正則化)やドロップアウトを使用する。
- 勾配消失/勾配爆発:層を深くしたことで勾配が急速に減少または増加する問題。解決策には重みの初期化方法の工夫(He初期化など)、バッチ正規化、残差接続(ResNet)などがあります
次は損失関数の最尤推定による条件付き分布の学習についてですが、前回の機械学習でも触れたので軽く触れる程度にします。
- 回帰問題:ガウス分布の尤度を最大化することは、平均二乗誤差を最小化することと同等。損失関数はL(θ) = 1 / nΣ(y – f(x, θ))^2、yは実測値、f(x, θ)は予測値
- 分類問題:多クラス分類では、カテゴリカル分布の尤度を最大化することが、クロスエントロピー損失の最小化と同等。損失関数はL(θ) = -ΣnΣCylogf(x, θ)、yはi番目のデータがcに属するかを示す指標変数、f(x, θ)はモデルによるクラスcへの所属確立への予測。
次は活性化関数についてです。主に隠れ層と出力層で使われます。
- シグモイド関数:σ(x) = 1 / (1 + e^-x)
- 出力が0から1、二値分類問題の出力層でよく使用されるが、勾配消失問題のため隠れ層ではあまり使用されない。
- Softmax関数:Softmax(x) = e^x / Σe^x
- 出力層の多クラス分類で使用、出力値の合計が1になるようクラスに属する確率を計算する
- ReLU関数:ReLU(x) = max(0, x)
- 出力が-1から1、原点に対して対象なので隠れ層でよく使われる。
- Leaky ReLU関数:LeakyReLU(x) = max(αx, x)、αは小さな正の定数
- ReLUの改良版でx < 0で微小な勾配をすることで、ニューロンが不活性になり,任意の入力に対して出力0だけになる問題を緩和。
- 双曲線正接関数(ハイパボリックタンジェント):tanh(x) = (e^x – e^-x) / (e^x + e^-x)
- 計算が効率的で勾配消失問題も緩和するので隠れ層でよく使用される。
次に誤差逆伝播法についてです。前述で述べた個所は省略します。
- 計算グラフ:この項目については割愛しますが、調べると表は出てきますので、誤差逆伝播法の計算がどのようなものかがよくわかります。
- 連鎖率:(f○g)'(x) = f'(g(x))g'(x)を満たす式。またはdf / dx = df / dg * dg / dxとなる。
- 再起的な適用:誤差逆伝播法は最終層から入力層に向かって連鎖率を再帰的に適用している。これが各層の重みに対する勾配を効率的に計算できる。
- シンボル間の微分:予め誤差関数を偏微分した数式を用意しておき、値を代入して勾配を計算する方法。
次はL1正則化とL2正則化についてです。機械学習の時にも触れたので流す程度です。
- L1正則化
- メリット:重要でない特徴の影響を完全に取り除くことができる。特徴選択の効果があり、スパースなモデルを生成する。
- デメリット:最適化が難しい。適切なパラメータの選択が重要
- L2正則化
- メリット:重みを効果的に小さく保ち、モデルの過剰適合を減らす。解が滑らかになり、計算が安定しやすくなる。
- デメリット:すべての特徴がある程度モデルに影響を与えるため、完全には不要な特徴を排除できない可能性がある。
次に画像データの拡張です。
- Random Flip:画像をランダムに水平または垂直に反転させる。
- Erase:画像の一部をランダムにマスク(消去)する。
- Crop:画像からランダムな領域を切り出す。
- Contrast:画像のコントラストをランダムに調整する。
- Brightness:画像の明るさをランダムに調整する。
- Rotate:画像をランダムに回転させる。
- MixUp:二つの画像を重ね合わせて新しい画像を生成し、対応するラベルも同様に混合する。
次にノイズ注入についてです。
- ターゲット値にランダムな変動を加える。例えば回帰ならガウスノイズ、分類ならラベルのワンホットエンコーディングにノイズを加える。
- メリット:ノイズに対する頑健性を高める。ノイズや微妙な変動に過度に適合する。多様性を増やす。
- デメリット:ノイズの量や種類を適切に選択しないと学習を妨げる。ノイズが不要な場合もある。
次はマルチタスク学習についてです。
- 複数の関連するタスクを同時に学習する機械学習の手法。転移学習は1つのタスクを学習をした後、別のタスクに適用させる。
- 画像認識(CNN)や自然言語処理(RNN)、Transformerで使用される。
- マルチタスク学習はソフトとハードで分けられる。
- ソフトパラメータ共有:複数のタスクが隠れ層を共有し、タスク固有の出力層を持つ。
- ハードパラメータ共有:各タスクが独自のレイヤーを持つが、レイヤーのパラメータは他のタスクのレイヤーのパラメータと似るよう制約がある。
次は早期終了についてです。
- 早期終了は、過剰適合を防ぐための正則化手法の一つで、訓練中にモデルの性能が改善されなくなった時点で訓練を停止する方法。
- メリット:訓練を適切な時点で停止し、過剰適合を防ぐ。計算資源を節約する。
- デメリット:適切なタイミングを設定しなければ、過小適合になる。
次はスパース表現についてです。
- データを表現するために多くの成分のうちわずかしか非ゼロでない表現を指す。
- 手法としてはL1正則化や特徴洗濯アルゴリズムがある。
- データを効率的に圧縮し、ノイズに対するロバスト(頑健)性が向上する。どの特徴が重要かわかりやすくなる。
次はアンサンブル学習についてです。
- バギング:訓練データからブートストラップサンプル(ランダムに選択されたサンプル)を複数回抽出し、学習した複数のモデルを組み合わせることで最終的な予測を行います。多くの場合、決定木をベースモデルとして使用される。
- メリット:各モデルの予測の分散を低減し、モデルのロバスト性が向上。(バイアスよりもバリアンスを低減する。)
- デメリット:計算コストが高くなり、抽出したサンプルのばらつきが似ていると精度があがらない。
- 代表例:ランダムフォレスト
- ブースティング:弱い学習器を逐次的に訓練し、間違った予測に重みを置いて、次のモデルがその誤差を修正する。
- メリット:バイアスを低減させ、高い予測精度を達成する。
- デメリット:剰適合するリスクがあり、計算時間が長くなる。
- 代表例:AdaBoosting、勾配ブースティング(XGboost、LightGBM等)
- スタッキング:複数の異なるモデルの予測を入力として、新たなモデル(メタモデル)で最終的な予測を行う。
- メリット:予測精度を向上させ、任意の数と種類のモデルを組み合わせれる。
- デメリット:設定やチューニングが複雑になる、メタモデルが過剰適合するリスクがある。
次はドロップアウトについてです。
- 過剰適合を防ぐために使用される正則化技術の一つ、訓練の各ステップでランダムにネットワークの一部のニューロンを無視する。
- 各ニューロンは確率 p(ドロップアウト率)で”使用”か”無視”かがランダムに決定される。
- ドロップアウトは訓練時にのみ適用され、予測時には使用されない。
次はバッチアルゴリズムとミニバッチアルゴリズムについてです。
- バッチアルゴリズム:訓練データ全体を使用して一度にモデルを更新する学習アルゴリズムで、各イテレーションで全データセットを通じて損失関数を計算し、その平均値に基づいてモデルのパラメータを更新する。
- メリット:勾配の推定が安定し、収束が滑らかになる。
- デメリット:大規模なデータセットではメモリ不足になることがある。パラメータの更新が遅くなる。
- ミニバッチアルゴリズム:訓練データの小さなランダムサンプルを使用してモデルを更新する学習アルゴリズム。各イテレーションで異なるミニバッチを選択し、そのミニバッチに対して損失関数を計算後、パラメータを更新する。
- メリット:大規模なデータセットでも扱いやすい。ニバッチごとに異なるサンプルを使用するため、過剰適合を防ぐ。
- デメリット:勾配の正確な推定でないことがあり、収束過程が不安定になる。
- オンライン学習:データを連続的に処理してモデルを更新する学習方法で、各データポイントを受け取るたびに即座にパラメータ更新を行う。
- メリット:新しいデータが利用可能になるとすぐにモデルを更新できる。メモリ使用量を抑えられる。
- デメリット:異常なデータポイントによってモデルが大きく乱されることがある。
次はアルゴリズムについてです。
- 確率的勾配降下法:一度に一つのサンプル、または小さなバッチのサンプルのみを用いて勾配を近似し、パラメータを更新する。
- 式:θt+1 = θt – η▽L(θt; x, y)、パラメータをθ、損失関数をL、学習率をη、xとyを訓練データの入力と出力、損失関数の勾配を▽L(θt; x, y)とする。
- モメンタム:勾配の指数的加重移動平均を用いてパラメータ更新を行う。
- 式:vt = γvt-1 + η▽J(θ)、θ = θ – vt、vtは時刻tにおけるモメンタム、γはモメンタム係数、ηは学習率、▽J(θ)は損失関数の勾配
- AdaGrad:去の勾配の二乗和のルートに反比例して各パラメータの学習率を調整し、頻繁に更新されるパラメータの学習率は徐々に減少する。学習率が単調に減少するため、深いネットワークでは後半で学習が進まなくなることがある。
- 式:Gt = Gt-1 + (▽J(θ))^2、θ = θ – η / √(Gt + ε) * ▽J(θ)、Gtは時刻tにおける勾配の二乗の累積話、εはゼロ除算を避けるための小さな定数。
- RMSProp:勾配の二乗の指数的加重移動平均を使用して学習率を調整する。AdaGradの学習率が急速に減少する問題を解決。
- 式:St = βSt-1 + (1 – β)(▽J(θ))^2、θ = θ – η / √(St + ε) * ▽J(θ)、Stは時刻tにおける勾配の二乗の指数的加重移動平均、βは減衰率。
- Adam:モメンタムとRMSPropを組み合わせたアルゴリズム、勾配と勾配の二乗のモーメンタムを考慮してパラメータを更新する。
- 式:mt = β1mt−1 + (1 − β1)▽J(θ)、vt = β2vt-1 + (1 – β2)(▽J(θ))^2、mt = mt / (1 – β1^t)、vt = vt / (1 – β2^t)、θ = θ – η / (√vt + ε) * mt、mtとvtは勾配のモーメンタムと二乗勾配のモーメンタムの推定値、β1とβ2は減衰率。
次は最適化戦略とメタアルゴリズムについてです。
- バッチ正規化:ミニバッチごとに入力を正規化する手法、各層の入力を平均が0、分散が1になるようにスケーリング、勾配消失や勾配爆発の問題を軽減し、学習率を高く設定しても安定した学習ができる。
- Layer正規化:各サンプル内の特徴全体にわたって正規化を行う。各層の入力の平均と分散がサンプルごとに独立して計算される。
- Instance正規化:画像生成タスクで使用される正規化手法で、各サンプル内でチャンネルごとに正規化を行う。
- 教師あり事前学習:大量のラベル付きデータを使用してモデルを事前に訓練し、その後、関連するタスクのために微調整する手法。有用な特徴を抽出する能力を獲得し、微調整によって特定のタスクに特化させる。
次は畳み込みネットワークについてです。
- 畳み込み処理:入力データに対して、カーネルをスライドさせながら適用し、入力データの局所的な特徴を抽出する演算、カーネルは重みパラメータを含み、これらの重みが学習プロセスを通じて最適化される。
- プーリング:特徴マップのサイズを縮小することで計算量を減らし、特徴の不変性を高める演算Maxプーリングはウィンドウ内の最大値を選択し、Averageプーリングはウィンドウ内の平均値を計算する
次は回帰結合型のニューラルネットワーク(RNN)についてです。
- シーケンス内の各要素を順番に処理しながら、過去の情報を隠れ状態として保持する能力を持つネットワーク。時系列データやテキストデータなどのシーケンシャルな情報を処理する際に、過去のコンテキストを考慮する。
- 長期依存性の問題(勾配消失・勾配爆発)が生じやすい。
次は双方向RNNについてです。
- シーケンスを順方向と逆方向の両方から処理するRNNで、ある時点での出力が、その時点における過去と未来の両方の情報に基づくことができる。文脈の全体像が重要になるタスクで有効。
- 計算コストが高く、リアルタイム処理には適さないことがある。
次はEncoder-Decoderについてです。
- 生成や変換モデルにおいて重要な役割を果たすニューラルネットワークアーキテクチャ。砂時計型を想定。
- エンコーダー:入力シーケンスを処理し、その情報を固定長のコンテキストベクトルにエンコードする。
- デコーダー:コンテキストベクトルを基に、目標シーケンスを生成する。デコーダーは、一つずつトークンを出力し、次のトークンの生成に前のトークンの情報を利用する。
- 代表例:オートエンコーダー、変分エンコーダー、SegNet、U-Net、pix2pix
次はSeq2Seqについてです。
- エンコーダーとデコーダーがRNNで構成されている。入力と出力のシーケンス長が異なっても扱うことができる。
- 機械翻訳やテキスト要約、音声認識で応用されている。
- Attention機構:seq2seqモデルの強化方法。デコーダーが生成過程でエンコーダーのどの部分に「注意」を払うべきかを学習し、コンテキストベクトルの制限を克服する。
次は長期依存性の課題についてです。
- RNNやその他のシーケンシャルモデルが、入力シーケンスの初期の部分と後の部分との間の関係を捉えることが困難である問題。勾配消失または勾配爆発の問題によって、モデルが過去の情報を長期間保持するのが難しいため発生する。
- 解決策としてLSTM(Long Short-Term Memory)やGRU(Gated Recurrent Unit)などの特殊なRNNアーキテクチャがある。内部にゲート機構を持ち、情報の流れをコントロールする。
次はLSTMについてです。
- 入力ゲート・忘却ゲート・出力ゲートがあり、長期記憶および短期記憶の更新を制御する。
- 入力ゲート:it = σ(Wi * [ht-1, xt] + bi)
- 忘却ゲート:ft = σ(Wf * [ht-1, xt] + bf)
- 出力ゲート:ot = σ(Wo * [ht-1, xt] + bo)
- 長期記憶(セル状態):Ct = ft * Ct-1 + it * tanh(WC * [ht-1, xt] + bC)
- 短期記憶(隠れ状態):ht = ot * tanh(Ct)
- xtは時刻tにおける入力ベクトル、htは時刻tにおける隠れ状態ベクトル、Wは重み行列、bはバイアスベクトル、σはシグモイド関数
次はGRUについてです。
- LSTMの簡略化版でリセットゲートと更新ゲートの2つのゲートを使用する。セル状態と隠れ状態を統合し、パラメータが少ないので計算効率が良い。
- 更新ゲート:zt = σ(Wz * [ht-1, xt])
- 忘却ゲート:rt = σ(Wr * [ht-1, xt])
- 候補隠れ状態:~ht = tanh(W * [rt * ht-1, xt])
- 隠れ状態:ht = (1 – zt) * ht-1 + zt * ~ht
- xtは時刻tにおける入力ベクトル、htは時刻tにおける隠れ状態ベクトル、Wは重み行列、σはシグモイド関数
次は勾配クリッピングについてです。
- ニューラルネットワークを訓練する際に勾配爆発問題を緩和するための技術。勾配のノルムがある閾値を超えた場合に、勾配のスケールを縮小してノルムがその閾値以下になるように調整する。
- 方法は2種類あり、勾配の各要素を[-c, c]の範囲に制限するか、ベクトルのノルムが閾値cを超える場合、勾配ベクトルをc * g / ||g|| にスケーリング(gは勾配ベクトル、||g||はノルム)
次はAttentionについてです。
- シーケンスを処理する際に、全ての入力要素が等しく重要とは限らないため、特定の単語に「注意」を払うよう処理する。
- メカニズムとしては
- 入力シーケンスの各要素が、現在のターゲット要素とどれだけ関連があるかスコアを出す。
- ソフトマックス関数などを用いて正規化し、各入力要素に対する重みを求める。
- 各入力要素の特徴とそれに対応する注意重みを掛け合わせ、その総和を取ることでコンテキストベクトルを生成する。このベクトルは、ターゲット要素にとって最も関連性の高い情報を含む。
- コンテキストベクトルを用いて、タスクに応じた出力(次の単語の予測等)を行います。
- Attentionの種類
- Self-Attention:同一のシーケンス内で要素間の関係をモデル化する。”Query”、”Key”、”Value”にベクトルが渡される。
- Source-Target Attention:エンコーダからデコーダへの情報伝達に焦点を当てる。Key-Valueのペアはエンコーダから情報を受け取り、Queryはデコーダーから情報を受け取る。
- Soft Attention:入力シーケンスの全要素にわたって重みを計算し、それらの加重和でコンテキストを形成し、全ての要素が何らかの重みを持つ。softmax関数を用いて微分可能である。
- Hard Attention:入力のサブセットのみを選択的に考慮し、どの要素に「注意」を払うかを確率的に選択する。argmaxを使用するため微分不可なため他の方法を使う必要がある。
- Local Attention:グローバルな全要素ではなく、入力シーケンスの一部分にのみ注意を払う。
- Global Attention:入力シーケンスの全要素を考慮してAttention重みを計算する。
- Multi-Head Attention:Attentionを複数の「頭」で並列に実行し、異なる表現空間での情報を同時に捉える。それぞれの「頭」が異なる部分集合に注意を払う。
少し長くなりましたがここまでにして、次回後編と開発環境について書こうと思います。ではでは