音声認識を短期間でマスターするためのPythonのナレッジベース
概要
本日より、音声認識のためのディープラーニングの新しい章を開設します。音声認識は、音声をコンピュータが読める入力に変換し、コンピュータが私たちの言っていることを理解できるようにし、真のヒューマンコンピュータインタラクションを可能にします。このコラムで、音声認識の分野の基本を理解していただければと思います。
RNN
RNN(Recurrent Neural Network)は、リカレントニューラルネットワークと呼ばれ、相関のある入力を持つタスクを処理するために使用される。RNNネットワークは、図のように入力層、隠れ層、出力層から構成される。
計算する
Hidden Layerはネットワーク全体の状態を定義しており、RNNネットワークは以下のように計算される。
状態を計算する (状態)
出力を計算する。
RNNの問題点
バニシンググラディエント問題。微分が1より小さい場合、勾配の追跡は層数が増えるにつれて指数関数的に減衰します。これは図のように勾配の消失と呼ばれます。
時間が経つにつれて、深いネットワークは浅い層をより弱く認識し、勾配がゼロに近づいていることがわかる。
爆発的な勾配問題。微分が1より大きい場合、層数が増えるにつれて勾配追跡は指数関数的に増加し、これを勾配爆発と呼びます。RNNネットワークの微分が1より大きい場合、時間依存性があり、gradient explosionが発生する。
LSTM
LSTM(Long Short Term Memory)、つまり長短記憶モデル。LSTMは特殊なRNNモデルで、長いシーケンスの学習時に起こる勾配消失や勾配爆発の問題を解決する。通常のRNNと比較して、LSTMは長いシーケンスでより良いパフォーマンスを発揮することができます。伝達状態htを1つしか持たないRNNに比べ、LSTMはct(セル状態)とht(隠れ状態)という2つの伝達状態を持つ。
LSTMは、入力ゲート、出力ゲート、忘却ゲートという3つの制御ユニットを追加したものである。LSTMのセルはどの情報を残し、どの情報を忘れるかを決めるので、神経回路網における長大な配列依存性の問題を解決することができる。
GRU
GRU (Gate Recurrent Unit) はLSTMに似ているが、より簡単に計算できる。GRUは、リセットゲート、更新ゲート、出力ゲートから構成される。リセットゲートはLSTMの忘却文と同じ役割を持ち、情報を保持するかどうかを判断するために使用されます。同様に、更新ゲートはLSTMの入力ゲートと同様である。
セックツーセック
Seq2seqは、EncoderとDecoderの2つのRNNで構成されている。Encoderは可変長配列を出力し、それをencoderstateに符号化し、Decoderは可変長配列を出力する。
アテンションモデル
アテンションは、RNNのEncoderモデルとDecoderモデルの効果を向上させるメカニズムである。機械翻訳、音声認識、画像アノテーションなどの分野で広く利用されている。深層学習におけるアテンション機構は、基本的に人間の選択的な視覚的注意機構と類似している。核となる目標も、大量の情報の中から、現在のタスク目標にとってより重要な情報を選択することである。
アテンションは、基本的にコンテンツベースのアドレス指定メカニズムです。ネットワーク上の状態の集合から、ある状態と似ている状態を選び出し、情報を抽出するのです。
まずEncoderとDecoderの特徴量から重みを計算し、Encoderの特徴量を重み付けして合計し、Decoderへの入力とする。(すべてのコンテキストが次の状態に影響を与えるわけではなく、Attentionは次の状態を生成するために使用する正しいコンテキストを選択することである。
教師強制機構
初期のRNNは、学習時の予測力が非常に弱いため、あるユニットが間違った予測をしてしまうと、後続のユニットが正しい結果を出すことが非常に難しくなります。例えば、ある文章を翻訳してみましょう。
- 人生はチョコレートの箱のようなものです。何が出てくるかわからない。
- 人生はチョコレートの箱のようなもの。次の一粒がどんな味になるかわからない
もし、人生を「シベリア」と訳してしまったら、後で正しく理解できる可能性はほとんどゼロに等しいでしょう。
Teacher Forcingは、直前のラベルを次の状態の入力として使用するネットワーク学習方法である。再度、上記の例で説明すると、Teacher Forcingの仕組みを使うと、例えば、lifeを"Siberia"と変換した場合、Decoderへの次の入力は、"Siberia"の代わりに、以前のラベルを状態として使用、つまり、"life "を使用することになる。これにより、RNNネットワークの予測力が大幅に向上する。
Pythonの知識で音声認識を短期間でマスターしよう!の記事は以上です。Python音声認識の詳細については、スクリプトハウスの過去記事を検索するか、以下の関連記事を引き続きご覧ください。
関連
-
[解決済み] 'list' オブジェクトに 'shape' 属性がない
-
[解決済み】Pandas - 関数のドロップエラー(ラベルが軸に含まれていない)【重複】。
-
[解決済み] urllib2 HTTP エラー 400: 不正なリクエスト
-
PythonでRuntimeWarning: invalid value encountered in double_scalars問題を解決する方法
-
自分で書いたPythonインポートpyファイル
-
[解決済み] Ubuntu 16.04でpython 2.7.13を完全にアンインストールする方法
-
[解決済み] Matplotlib で傾きと切片に基づく直線を追加するには?
-
[解決済み] Pythonでvtkをstlに変換する方法は?
-
ImportError: 名前 'imread' をインポートできません。
-
python3 実行エラー。TypeError: タイプ 'type'のオブジェクトは、JSONシリアライザブルソリューションではありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] データ型が理解できない
-
[解決済み】「getaddrinfo failed」、これはどういう意味ですか?
-
[解決済み】ImportError: encodings'という名前のモジュールがない
-
[解決済み】SQLAlchemyの行エントリを更新する方法は?
-
[解決済み] Pythonで関数を前方に宣言することは可能ですか?
-
[解決済み] PySparkのDataFrameで平均と標準偏差を計算するには?
-
[解決済み] Flaskアプリ "Restarting with stat"
-
[解決済み] AttributeError: 'list' オブジェクトには 'copy' という属性がありません。
-
nltkダウンロードエラー[Errno 61] 接続が拒否された場合の究極の解決方法
-
redis' という名前のモジュールがない