1.5K Views
December 28, 23
スライド概要
Pythonで学ぶ音声認識の輪読会第9回の発表スライドです。
2023年12月14日(木) 18:30~
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
音声認識 7章 1~3節 Connectionist Temporal Classification 京都大学工学部電気電子工学科4回生 三宅大貴 0
フルニューラルネットモデルへ DNN-HMMのように多段的な学習を行うのではなく、一度にすべて のモデルの学習を行いたい(End-to-End) Connectionist Temporal Classification (CTC) ⚫ Attention encoder-decoder モデル を扱う ⚫ 1
Recurrent neural network (RNN) (unidirectional) RNNの計算式 2
RNNの弱点 𝑡 = 0~𝑇 まで計算した後に誤差逆伝播を行う (BPTT; Back Propagation Through Time) →勾配爆発や勾配消失が起きる 勾配消失の結果、初期の入力は学習にほぼ寄与しない(遠い過去の 情報を見れない) 3
Long short-term memory (LSTM) LSTMの計算式 入力、出力、隠れ状態をそれぞれどれだけ保持するかを動的に決定 Residual構造により勾配消失を防ぐ 4
Gated recurrent unit (GRU) GRUの計算式 GRUよりも省パラメータ 5
Gradient Clipping LSTMやGRUで勾配消失は防げても勾配爆発は防げない →Gradient Clipping 6
Connectionist temporal classification (CTC) フレームごとのラベル付けを諦める CTCでは各時刻(フレーム)ごとに各トークンの事後確率を予測する トークンのラベル数は音素(や仮名、単語)にブランク(空)トークン を加えた数だけ用意する 予測されたトークン列に以下の操作 𝓑 を加えて認識結果とする ⚫ 連続するトークンを1トークンとする ⚫ ブランクトークンを除去する 例えば 𝓑 [o, −, −, o, i, i, i, −] = [o, o, i]となる 7
CTCの学習 トークン列の予測結果 𝑙 の事後確率は以下で計算できる 損失関数はトークン列の事後確率に対するクロスエントロピーとする 8
損失関数の微分 各出力に対する勾配は以下のように求まる 𝑃 𝒍, 𝜋𝑡 = 𝑘 𝒙 は時刻 𝑡 に(𝑠 番目の)トークン 𝑘 と予測される前向き 確率 𝛼𝑠𝑡 と後ろ向き確率 𝛽𝑠𝑡 から計算される(次ページ) 9
前向き確率と後ろ向き確率 10
パスの遷移方法 11
前向き確率の計算方法 𝑡 = 0 の時はブランク or 𝒍 の1文字目のみを考える(最終的に 𝒍 にな るパスのみを考えているため) 𝒍′ は拡張トークン列 𝒍′2𝑖 = blank 𝒍′2𝑖+1 = 𝒍𝑖 それ以降は前ページの遷移にそって更新 12
後ろ向き確率の計算方法 𝑡 = 𝑇 − 1 の時はブランク or 𝒍 の最後の文字で終わると考える それ以降は前向き確率と同様に更新 13
まとめ まとめ1 Recurrentな構造のモデルを使うことでEnd-to-Endで学習できる まとめ2 CTCではブランクトークンを導入しフレームごとにトークンを予測する まとめ3 前向き確率と後ろ向き確率によってトークン列の事後確率が計算できる 14
15