しんさんのブログ

科学や技術のこと読書のことなど

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

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

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

[2017/1/13追記]
以下の正誤表でアスタリスクが不要としていましたが、Chapter1に「アスタリスクのついた節は若干アドバンスな内容ですので、最初は読み飛ばしてかまいません.」という記述があるのを読み飛ばしていましたので、正誤表を訂正しました.


[Chapter 2]

p.15 式 (2.11)右辺の \mathrm{x}_nはイタリック体の x_n

p15 式 (2.15)は以下のように修正
 E_{\mathcal{N}} [ \frac{1}{N} \sum_{n=1} ^N (x_n -\hat{\mu} )^2 ]
  =  E_{\mathcal{N}} [ \frac{1}{N} \sum_{n=1} ^N \left( (x_n - \mu )^2 - 2(x_n - \mu)(\hat{\mu} - \mu ) - (\hat{\mu} - \mu)^2 \right) ]

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

p.18 式 (2.25)の2行下
 \log L(\theta) = -N \log \sigma^2 - \cdots ------>  \log L(\theta) = -\frac{N}{2} \log \sigma^2 - \cdots

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

p.32
式(2.59)の3行下
対数オッズ比が1を超えると -------------------> 対数オッズ比が0を超えると

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

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

p.85 式(4.45)の2行下
同時に第 l層のユニットと結合している l+1層の -------> 同時に第 l+1層のユニットと結合している l層の

p.86 式(4.47)の1行下
 P( w^{(l-1)}) = P(- w^l) --------->  P( w^{(l-1)}) = P(- w^{(l-1)})

p.91 4.4.3節のタイトル文章のアスタリスクが不必要
[Chapter 5]
p.100
式(5.15), 式(5.16), 式(5.17)の \omegaの右肩の添え字のカッコが不必要

p.107
式(5.30)
 z = \sum_{k} ^{'} \cdots ------------>  z = \sum_{k'}  \cdots

p.109
式(5.32)の3行目exponentialの肩のカッコの数が合っていない.
式(5.33)の左辺も同様.

p.111 2行目文中の式
 p/(1-p) --------------->  (1-p)/p

[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.143
式(7.30) 右辺
 {\rho}^x (1-\hat{\rho})^{1-x} ------- >  \hat{\rho}^x (1-\hat{\rho})^{1-x}

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

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

p.149
最終行
適当な確率でlがuに -------> 適当な確率でlかuに

[Chapter 8]
p.154
図8.1の一番右の図のキャプション
(b) --------> (c)

p.159 図8.4の一番下、緑色で塗られている3x3のフィルタの右下の成分
2 --------> 0

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


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

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

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

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

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

Visual Studio codeでLatexを使う

2024/5/17追記
VSCode で最高の LaTeX 環境を作るというとても素晴らしい記事がありましたのリンクを張ります
qiita.com


Visual Studio CodeLatexを使って文章を書いて、コンパイル、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)
のほうがしっくりくるのですがどうでしょうか。

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