pikesaku’s blog

個人的なプログラム勉強メモです。記載内容について一切の責任は持ちません。

機械学習関係の勉強会メモ②

Deep Learning(以降DLと記載)の代表的な使われ方

 
①画像認識
自然言語処理
音声認識
 
全ての用途においてDLがベストではない。
 

Microsoft Cognitive Services

 
画像分析、音声認識、レコメンデーション等のAPIツールを提供
デモとしてCaptionBotがあり。
 
CaptionBot - For pictures worth the thousand words
 
画像をアップロードすると、それが何であるか認識した結果を教えてくれる。
 
例)はりねずみの写真をアップロードした場合
f:id:pikesaku:20170723125023p:plain
 

Tensor Flow

 
Tensor Flowを理解するには、playgroundが有用
playground.tensorflow.org
 
ニューラルネットワークの仕組みを理解するための教育コンテンツ
 

簡単なデータセットの分類動作

f:id:pikesaku:20170723134213p:plain
左上のデータセット
 
デフォルトの設定のままでも、実行すれば精度の高い学習モデルはすぐできる。
 
実行前
f:id:pikesaku:20170723134025p:plain
 
実行後
f:id:pikesaku:20170723134043p:plain
 

複雑なデータセットの分類動作

右下のデータセット
f:id:pikesaku:20170723134954p:plain
  
デフォルトの設定では、時間がたっても
入力・ニューロン・レイヤを追加する必要あり。
 
実行前
f:id:pikesaku:20170723134705p:plain
 
実行後
f:id:pikesaku:20170723135201p:plain
 
Activationでは活性関数を指定
レイヤやニューロンは多ければ良いわけではない。
できるだけシンプルな構成で精度を上げるのが良し。
 

おすすめのDLフレームワークは?


使いやすいのが一番では?
 

DLの処理について

多層パーセプトロン 入力・出力サイズが固定
RNN 入力が可変のもを扱う。音声・時系列データ等
CNN 画像処理で使われる

 

関連キーワード

 
言語処理=>encodecモデル→RNN→Seq2Seq
Sequence-to-Sequence(Seq2Seq)学習は、任意長の入力列から任意長の出力列を出力するような学習のこと
 
chainernlpman.hatenablog.com
 

Deep Learningの実装はコーディングするべきか?

 
そうでもない。GithubにDL実装プログラムがあり。
言語処理の場合、OpenNMTがオススメ。コードを書かずモデル作成が可能。
 
DL実装ではバグ取りが大変。そもそも結果が何故そうなるかわからないのに、バグかどうかの判定も困難。
Githubソースを使う時の注意点はバグが有る点。信頼性の高いものを使うべき。
最近Tensor FlowがOpenNMTみたいなサービスを公開したらしい。。。
 

OpenNMTについて

 
必要なものはデータだけ。
質問&回答を記述した2つのファイルが必要。(2ファイル間で質問と回答が1行毎に対応している必要あり。)
質問・回答セットは万単位は必要
 

Deep Learning取り組みの現状

 
経験則が大きい。何故それが正しいかは、説明できないケースが多い。
ビジネス活用する時は、簡易PoCをして結果が出たものを使うべき。結果が出ない場合は、ニューラルネットをいくら調整しても無理な場合が多い。 
汎用人工知能→専門家の間では使われない言葉。SF映画レベルの色々できる人工知能はまだまだ実現できないとの感想。現在の人工知能はタスク特化。それらを組み合わせた結果、汎用的に見えるものもあるが、あくまで複合技術であり、カバーできる範囲は少ない。
 

Deep Learningに取り組む時の数学知識の取得について

 
Playgroundが理解できる程度でOK。(これだけでも難しいそうなのだが。。。。。) 
統計学の習得は不要。
数学知識の習得は必要に応じてやるのが効率良し。
 

OpenNMT検証メモ

  
OpenNMT - Open-Source Neural Machine Translation
 

環境

Ubuntu 16.04.2 LTS
最小インストー
言語・ロケールは日本語選択
 

環境構築手順

 
Installation - OpenNMT
 
上記のDocker利用方式でやってみる。
 
Ubuntuにopenssh-serverインストール&起動(Ubuntuは普段使わない。最小だとインストールされなかった)
$ sudo atp-get install openssh-server
$ systemctl start sshd
 
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
$ sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb

$ sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'
$ sudo apt-get update
$ vim /etc/apt/sources.list
以下行を最後に追加
deb http://kr.archive.ubuntu.com/ubuntu trusty main
$ sudo apt-get install libltdl7 docker-engine
$ sudo apt-get install nvidia-modprobe
$ sudo dpkg -i /tmp/nvidia-docker*.deb
 
※URLの手順だとlibltdl7が依存関係でインストールされない問題があった為、上記手順で実施。nvidia-dcockerも最新がリリースされていた為、wgetのパス変更。
 
$ sudo nvidia-docker run -it harvardnlp/opennmt:8.0