通常の「Convolutional Neural Network(CNN)」の場合は、入力から出力への一方向のデータの流れだけであるが、RNNでは次の図にみられるように、時間的に前側のネットワークとの接続を持つ層と後側のネットワークとの接続を持つ層があり、オーディオ信号の時間的な繋がりを考慮した処理が行えるようになっている。

RNNは時系列のデータを扱うために考案されたネットワークで、タイムスロットを担当する多数のネットワークが並んでいる。そして、前後のタイムスロットのデータを受け取るコネクションがあり、入力データの時間的な繋がりも考慮することができる

音声認識では、データ量が精度に大きな影響を持つため、Baiduでは膨大な学習データを集めている。過去の研究では80~2000時間のスピーチデータを使っていたが、BaiduのDeep Speechでは4万5000時間とけた違いのスピーチデータを集めて学習を行っている。

これまでの研究では80~2000時間のスピーチデータを使っていたが、BaiduのDeep Speechでは45,000時間のスピーチデータを使って認識精度を向上させている

次のデータは縦軸が音声認識のエラーのパーセントで、破線の位置が標準的な人間のエラー率である7.5%を示している。横軸は日付で、10日の刻みとなっている。学習期間が経過するにつれてエラー率が低下し、学習開始から約3カ月後に人間を下回るエラー率に達している。

BaiduのDeep Speechのエラー率の推移。学習開始後、約3カ月で人間のエラー率である7.5%(破線)を下回るエラー率を達成している

Baiduの音声認識は、2012年には単語の誤認識率は17%であったが、年々エラーが減少し、2016年には3.5%に下がった。これに伴い利用者数が増えており、2015年1月と比べて現在のユーザ数は3倍になっているという。Ng氏は95%の精度と99%の精度の認識は質が違い、Game Changingになるという。まだ、Baiduの音声認識は99%の認識率には達していないが、99%が視野に入るところには来ている。

左のグラフはBaiduのDeep Speechの単語認識のエラー率の推移。右のグラフはユーザ数の推移

昔のアルゴリズムでは、学習データを増やしていくとすぐに飽和して、高い性能は得られなかった。ニューラルネットワークも飽和はするが、ネットワークの規模を大きくすると飽和レベルが上がる。このため、ネットワークを大きくして、学習データを増やすと高い性能が得られるという。つまり、性能を上げるためにはネットワークを大きく、複雑にし、学習するデータ量も増やす必要があり、より強力な計算パワーが必要になる。

ニューラルネットは規模を大きくすると性能の飽和レベルを上げることができる。大きなネットワークを大量のデータで学習させると、より高い性能が得られる

新たな問題に対してニューラルネットワークを開発するには、まず、トレーニング用データで学習させて、それがうまく動くようになったらテストデータを認識させてみる。これも上手くいけば完成であるが、トレーニングがうまく行かなければ、ネットワークをより大きくして見る。これはロケットエンジンを大型化することに相当する。トレーニングがうまく行ってもテストデータがうまく処理できない場合は、学習データを増やしてみる。これは、より多くの燃料をつぎ込むことに相当する。

ネットワークを大きくする場合は、より大量の計算を同じ時間で処理するというウィークスケーリングが成り立っていれば良い。一方、学習データを増やす場合は、それぞれの学習結果を順次反映して行く必要があるので、個々の学習データを処理する時間を短縮するストロングスケーリングが必要となるという。

ニューラルネットワークを開発するには、トレーニングデータでの学習がうまく行けば、テストデータを上手く処理できるかどうかをチェックする。両者がうまく行けば完成であるが、トレーニングがうまく行かない場合はネットワークをより複雑にしてみる。テストデータがうまく処理できない場合はデータを増やしてより学習を深める