「これならわかる深層学習 入門」 瀧 雅人著 の正誤表

機械学習スタートアップシリーズ これならわかる深層学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ これならわかる深層学習入門 (KS情報科学専門書)

瀧 雅人さんの「これならわかる深層学習 入門」 を読み始めました。
本屋でパラパラと見たところ、機械学習や深層学習に関して非常に丁寧に数式を使って説明してあるようでしたので
きちんと一冊読んでみようという気になりました。
まだ最後まで読んでいませんが、いくつかタイポや書き間違えらしき部分がありましたので、自分用のメモも兼ねて書いておきます。

(誤) --> (正) という書き方で書いています

[Chapter 2]
p.16 式 (2.20)
 \frac{1}{N^2} (\cdots) ->  \frac{1}{N} (\cdots)

p.26 (2.45)の2行下
 L = (\omega) ->  L(\omega)

p.35 定義2.5
 P(C_k | x_n) の前に \logが抜けている

[Chapter 4]
p.81 4.2.7 Adamの2行下
式(4.26) -> 式(4.27)

p.91 4.4.3節のタイトル文章のアスタリスクが不必要

[Chapter 5]
p.100
式(5.15), 式(5.16), 式(5.17)の \omegaの右肩の添え字のカッコが不必要

[Chapter 6]
p.116
式(6.4)
d- > y

p.119
(図 6.1)で \omega^{(l-1)} ----->  \omega^{(l)}

p.119 3行目の文中の式
 \omega^{(l)} (u^{(l-1)}) ----->  \omega^{(l)}f (u^{(l-1)})

p.119
式(6.9)
 \delta^{(l)} = \frac{\partial E}{\partial u^{(l)}} \frac{\partial u^{(l+1)} }{\partial u^{(l)}}=\cdots ---->  \delta^{(l)} = \frac{\partial E}{\partial u^{(l+1)}} \frac{\partial u^{(l+1)} }{\partial u^{(l)}}=\cdots

[Chapter 7]
p.134
式(7.7)の一行上
 D \times d ---->  d \times D

式(7.7)
 P \equiv \Gamma^\dagger \Gamma --->  P \equiv \Gamma  \Gamma^\dagger

p.146
演習 7.1
 l^{'} < l ----->  l < l^{'}

p.149
7.5 デノイジング自己符号化器 1行目
4.5節 ------> 5.5節

p.162
8.2.3, 8.2.4節のタイトルのアスタリスクが不必要


また、読み進めて気づけば追加していきます.

「機械学習入門」 大関 真之著 を読みました

機械学習入門 ボルツマン機械学習から深層学習まで

機械学習入門 ボルツマン機械学習から深層学習まで

表紙が機械学習の本の中ではトップクラスに機械学習らしくなくいい意味で手に取りやすいです。
タイトルに入門とあるように物語仕立てで機械学習のことを知らない人でも楽しんで読めるような内容になっています。
しかし、一方で著者は物理学から機械学習の研究者になり、学術論文もだしているような本物の研究者ですので、
書いてあることは正確で信頼できます。
私は機械学習や深層学習のことをある程度はしっていますので、あぁあのことを言ってるんだなと読んでいて気づいてしまい
タネを知っている手品を見ているような感じでしたが、全体知識がなくても少なくとも6章までは読み進められると思います。
6章から話が抽象的になり始めて理解しにくくなるように感じました。
それでも平易な説明で正確性を損なわずにそれでいて、物語仕立ても崩さずに説明しきっているところはこの手の本ではめったに見ないほどの力作だと感じました。
著者の更なる著作を期待しながら本書を読み終えました。

Visual Studio codeでLatexを使う

Visual Studio Code でLatexを使って文章を書いて、コンパイル、platex2pdfまでやってしまおうという話です.
まずはVSCodeプラグインであるLaTeX Workshopをインストールし設定します.
インストールと設定は以下の解説通りにやればすんなりOKです.

elecho.hatenablog.com

ちょっとした注意としてこのままですとjarticleはコンパイル通りますが、ujarticleはコンパイル通りません.
こちらを使う場合はuplatexを使用する必要があります.

\documentclass[16pt,a4j]{jarticle} % <- platex
or
\documentclass[a4j]{ujarticle} % <- uplatex用

Ctrl+,(カンマ)でVS Codeの設定画面を開きlatexの設定を追加するときに,設定ファイル以下のように"-u"を
追加したものに変更します.

"latex-workshop.latex.toolchain": [{
"command": "ptex2pdf",
"args": [
"-u",
"-l",
"-ot",
"-kanji=utf8 -synctex=1",
"%DOC%"
]
}],

uplatex とplatexの違いについては以下のサイトに詳しいです.
基本的にはuplatexを使用した方がよさそうです.

upTeX,upLaTeX - TeX Wiki

機械学習用ハードウェア

2017年の8月あったHot Chips 2017でマイクロソフトがディープニューラルネットワークの推論処理を高速で実行できる
クラウド環境Project Brainwaveを発表したというニュースは気になりますね。
推論処理のレイテンシを下げることは今後IOTとか自動車とかエンタテインメントにも必須ですから、各社注目しているというわけですね。
マイクロソフトFPGAを用いますが、専用ハードを作るGoogleのような解もあるし、NVIDIAはいまはどちらかというと学習向けにGPUを提供していますが、本来GPUはリアルタイムコンピュータグラフィックスで発展したことを考えると推論エンジンにも進出してくるでしょうし、今後半導体業界を巻き込んで動きがさらに加速すると思われます。

2017/10/11 誤字を修正しました

pythonを使った深層学習用ライブラリkerasのインストール方法

kerasとは?

kerasはTensorFlowやTheanoをバックエンドとして実行するライブラリです。 深層学習のネットワークのアーキテクチャの構築を直感的に記述することが可能なライブラリです。 要は、深層学習をお手軽に書くことができますよ、ということですね。 詳しくは、kerasのホームページをご覧ください。 日本語に翻訳されたページも用意されています。 keras.io

kerasのインストール

Windows10Pro64bit, GPUNVIDIA GTX1050の環境にインストールします。
まずは、以前このブログで書いたように wshinya.hatenablog.com Anacondaを使用してkeras用の仮想環境を作製します。
次に、作成したconsoleを立ち上げ作成した仮想環境をactivateします。
仮想環境のプロンプトがでたら、

pip install tensorflow-gpu
conda install scipy
pip install keras   

であっさり成功、と言いたいところですが、"Fail building wheel for pyyaml"というエラーメッセージで失敗しました。
どうやらインストールスクリプトのどこかで失敗しているようです。
前にも同じような現象に当たったことがあり、その時にはコンソールを管理者モードで起動すると成功したので、
以前と同様管理者モードで立ち上げて上記pip, condaコマンドを実行するとインストールは無事成功しました。
インストールしたパッケージのバージョンは、

    conda list

で見ることができます。
これで確認すると、kerasは2.0.8, scipy 0.19.1, tensorflow-gpu 1.3.0が インストールされていることが分かります。
正しくkerasがインストールされているかどうかを確認するために、pythonを立ち上げて

    import keras

をやってみました。
残念ながら、

    ModuleNotFoundError: No module named 'yaml'

というエラーメッセージが出てしまいました。
yamlがないということなので、

    conda install pyyaml

をコンソールで実行し、再びpythonでimport kerasを行うと今度は無事エラーが消えました。
ちなみにインストールしたpyyamlのバージョンは3.12でした。
いくつかはまりましたがこれでkeras + tensorflow-gpuの環境の構築は成功です。

numpyで行列を扱うときに気持ち悪いこと

例えば以下のような行列計算をnumpyで書くときに皆さんはどのようにしますか。

A:1行2列の行列
B:2行3列の行列
C: C = AxB -> 1行3列の行列

このとき,
A= np.random.rand(2)
B= np.random.rand(2,3)
C= np.random.rand(3)
と書くことが多いですが、
A, B, Cをshapeで見ると

A: (2,)
B: (2,3)
C: (3,)

となっていて、(行の数、列の数)となっていなくて非常に気持ち悪いです

以下のように書くと,
A= np.random.rand(1, 2)
B= np.random.rand(2, 3)
C= np.random.rand(1, 3)
のほうがしっくりくるのですがどうでしょうか。

テンソルの足の縮約を考えた時も上の書き方のほうが数学の表記とあっていてすっきりします。

Windows10でDraknetをビルドしてYOLOを動かして画像認識を試してみました

最近以下のような画像を見かけることが多くないですか?
https://pjreddie.com/media/image/Screen_Shot_2016-11-17_at_11.14.54_AM.png

自分のマシンでも動かしたくなりDarknetをダウンロードしてmakeして,手持ちの写真でやってみましたという話です.
Darknet, YOLOのオリジナルサイトは以下になります.
pjreddie.com

基本的には以下のサイトの解説どおりにやってみました
http://www.lisz-works.com/entry/darknet-yolo

上記サイトにリンクされている、以下のサイトにdarknetのインストールとmake方法が書いてありました.
http://www.lisz-works.com/entry/darknet-install-make

書いてある通りにすると,makeが通りませんでした.

timer関係の定義がないという

include/darknet.h:709:11: error: unknown type name 'clock_t'
float sec(clock_t clocks);

エラーがでてmakeがストップしました.

対処法として
#include
をdarknet.h
に書いたらmakeが通りました.

試しに

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
とやったら私のマシンで30秒ほどで処理が終わりました。

makefile
GPU=0

GPU=1
とすればGPUを使用するバージョンになり処理速度は速くなると思いますが、cuda関係のエラーで
今のところmakeできません.

後日、GPU版のmakeを成功させたいと思います.