自然言語処理

1.GAN(敵対的生成ネットワーク)

 Generative Adversarial Networkと表される
   データから特徴を学習することで、
     実在しないデータを生成したり、
     存在するデータの特徴に沿って変換する

   2つのネットワークで構成されている
     偽物を作り出す悪人・・・Generator(生成ネットワーク)
     本物かどうか見破る鑑定士・・・Discriminator(識別ネットワーク)

     教師なし学習の一つ
       Generatorで偽物を作り出し、本物とDiscriminatorすることで
       学習成果を積み重ねる

 使い道
   ・高品質の画像を作る
     ピンボケした写真や昔の写真の解像度を上げる
     複数の顔の画像を取り入れ、実際には存在しない人の画像を作る
   ・文章から画像を起こす
     絵の特徴を書いた文章から画像を生成する
   ・画像を別の画像に仕上げる
     1つの画像からイラスト風、写真風、アニメ風と別の画像を作る
   ・動画を別の動画に仕上げる
     他の人の動画に別の人の顔を載せる
     別人の2人の動きをシンクロさせる

2.RNN(回帰型ニューラルネットワーク)

 Recurrent Neural Networkと表される
   文章などの連続的な情報を利用できる

   文章の中で次の言葉を予測する必要がある場合、
     「その前の言葉が何だったのか」を記憶しておかなければ、
     予測を立てることは難しくなる

   可能にするのが、「以前に計算された情報を覚えるための記憶力」
     RNNは直前の言葉に左右されることなく
     一定の要件の下で特定の言葉を覚えながら作業が可能

 DNN(深層ニューラルネットワーク)は、
   入力層から入力されたデータを、「中間層 1、中間層 2、・・・」と
   層の順序にしたがってデータを伝播させる

 RNN(回帰型ニューラルネットワーク)は、
   「入力層」「1 層の中間層」「出力層」の 3 層から成り立ち
   中間層における演算結果を出力層に出力していくとともに、
     同じ演算結果を再び自分自身(中間層)に入力し、再演算する

   中間層で行われた演算結果を、再び自分自身(中間層)に代入する
     これを繰り返すことによって、同じ中間層が何度も使用される
     複数の中間層から成り立つニューラルネットワークに見える

 使い道
   ・言語モデルと文章生成
     言語モデルは、直前の言葉を利用することによって、
     連続した言葉の中における「次の言葉の出現確率」を予測できる
     どれくらいの頻度で文章が現れるのかを予測することから、
     主に機械翻訳の領域で多く活用されている
     インプットデータは連続的な言葉の列となり
     アウトプットは予測された言葉の列となる

     文章生成は、次の言葉を予測できることから
     アウトプットの確率からサンプリングしていくことで
     「新たな文章を生成するためのGenerativeモデルを得られる」
   ・機械翻訳
     ソース言語(日本語をはじめとする言語)の文章をインプットとし
     「完全なインプットデータを読み込んでから
       アウトプットデータの処理を開始していく」
     翻訳された文章における最初の言葉は、
     完全なインプット文章の情報が必要となる
   ・音声認識
     入力が可変長の音声で、出力も可変長のテキストとなる
     単なる音の文字化ではなく、文脈をきちんと理解している必要がある
     スマートスピーカーは、文脈をしっかりと理解しているからこそ、
     高い精度で変換することができている
   ・画像分析
     画像をもとにして「何をしているか」を説明するような場合には、
     CNNにRNNを組み合わせることで、説明が可能になる
     インターネットにアップロードされた写真を
     自動で説明付けする機能などで応用され始めている

3.LSTM(長・短期記憶)

 Long Short-Term Memoryと表される
   RNN(再帰型 ニューラル ネットワーク) の一種

 3つのゲートで管理される
   Forget Gate:忘却ゲート
     古いC_{t-1}のうちどの部分を忘れかを決める
   Input Gate:入力ゲート
     新しいインプットと一つ前のアウトプットを組み込む
   Output Gate:出力ゲート
     更新された長期記憶をもう一度処理し、アウトプットを作る

 大雑把な仕組み
   RNNを使って、入力が文字、出力が次の文字として学習でき
   そのモデルに対して出力された単語を入力させると、
   文章の生成が可能になる

   RNNは入力によって内部の重みを更新し、次の入力に対する準備を行う
   RNNは情報を長く記憶することが得意ではない
   単語をいくつか入力するだけで、過去の情報は忘れてしまうため
   LSTMを活用すると、その問題を解消できる

 RNNとLSTMの違い
   RNNはデータを取得して、その数字がどのように変化していくか予測する
     実店舗における毎日の売り上げデータ
     ECサイトにおける訪問者数データ
     株価の動きや変化といったデータ を取得する

   LSTMは対応ができなかった長期の時系列データを扱える
     RNNよりも高い実用性を実現している

 使い道
   ・文章生成
     架空の名前から架空の人物の歴史概要を作成させる
       wikipediaに掲載されている人物の概要部分を抜き出し、
       RNNにトレーニングさせ
       トレーニングさせたモデルに対して名前を入力すると
       その人物の概要を出力する
   ・株価予測
     モデルを構築すれば、1時間ごとの株価を予測することが可能
       データのインポートを行い、株価データの波形を確認する
       入力データを数日分のデータを集めた形に加工する

4.Keras

 Googleが開発したニューラルネットワークのライブラリ
   Pythonで書かれており、
     読みやすく簡潔なアーキテクチャで迅速に実装が可能
     機械向けではなく人間向けに設計されたライブラリである

 特徴
   シンプルで柔軟に利用できる
     機械ではなく人のために設計されたAPI
     一貫性のあるシンプルなAPI
     エラー発生時の明確で実用的なフィードバック 等

     単純にシンプルなだけではなく、柔軟性を併せ持つ
     低レベルな深層学習言語であるTensorFlowと統合しているため、
     基本的な深層学習言語を理解していれば、容易に実装が可能

   事業・研究の分野で幅広く活用されている
     個人ユーザー、企業のビジネス、大規模な科学機関

   モデルの製品化が容易い
     機械学習をした後の計算式、つまりモデルの製品化が容易い
     さまざまなプラットフォームで簡単にデプロイすることができる

   複数のサポート先
     バックエンドエンジン
       TensorFlow ・・・Googleが開発した機械学習のライブラリ
       CNTK ・・・Microsoftが開発した機械学習のライブラリ
       Theano・・・モントリオール大学が主導し開発したライブラリ
     GPU・分散学習
       複数のGPU並列処理のための組み込みサポート
       利用者や仕事量が急激に増大した場合であっても
         柔軟に対応できるスケーラビリティを備えたライブラリ
       最新のNVDIA GPUとTPUの混合精度学習をサポートする

 使い道
   ・画像認識
     CNNとRNNの両方もしくは2つの組み合わせをサポートする
       人の顔を特定する顔認証
       画像内にある数字や文字を識別する文字認識
       画像にあるものから主な物体を出力する物体認識
   ・音声認識
     ノイズの多い会話から会話だけを残してノイズを除去する
     ジャンルの音楽を記憶させ、音楽のジャンル分けを自動で行う
     文字列を音声データに変換する
   ・文章の生成
     LSTMを使って行う
       作家の小説を記憶させ、
         小説で使われている単語を入力するだけで
         その作家が書いたような文章を自動で生成する
   ・botシステムの作成
     seq2seqというプログラムを使い、チャットボットの作成が可能
     顧客から寄せられるよくある質問とその回答を記憶させれば、
       チャットボットによる自動応答が可能