ディープラーニング学習メモ #1 行列

Udacityの Deep Learning Nanodegree Foundation の Week1 が終わりました。

シラバスでは学習時間の目安は 3-4 hours per week と書いてありましたがかれこれ20時間近く費やしています。。ヽ(;´Д`)ノ

誤差の逆伝搬の詳しい仕組みとか今までスルーしてきたところなのでそれなりに理解に時間がかかるのは仕方ない…とは思いつつも Week2以降大丈夫だろうか? 不安。。

それはおいとき、自分自身の理解をより深めるために少しずつ学習メモを残していきたいと思います。

1回目は 行列です。

行と列とrowとcolumn

どちらが行でどちらが列か、、

イメージで覚えると忘れにくいです。次の図が分かりやすかったです。

http://sci.tea-nifty.com/blog/2014/12/row-column-f052.html

http://sci.tea-nifty.com/photos/uncategorized/2014/12/06/b4ffosxciaazysl.jpg

http://id.fnshr.info/2015/10/17/matrix/

http://id.fnshr.info/wp-content/uploads/sites/2/2015/10/column.png

http://id.fnshr.info/wp-content/uploads/sites/2/2015/10/row.png

http://lambdalisue.hatenablog.com/entry/2013/07/18/134507

http://cdn-ak.f.st-hatena.com/images/fotolife/l/lambdalisue/20130718/20130718131854.png

行と列の関係は 画像処理に慣れている人は混乱するかもしれません。(私だけ??)

というのも、画像のサイズは通常、 W (横の大きさ) x H (縦の大きさ) と表現しますがこれを行列にすると逆になります。

つまり、W x H の画像は H x W の行列で表現されます。

f:id:sanshonoki:20170214062324p:plain:w400

numpyでの行ベクトルと列ベクトル

numpyの次の3つの構造のイメージつくでしょうか..?

(m, )

(m, 1)

(1, m)

正解・・・

(m, ) は 1次元ベクトル、

https://wikimedia.org/api/rest_v1/media/math/render/svg/507111acf945f5fe57c45ecc563ec02a4aff4a1b

(m, 1) は 列ベクトル

https://wikimedia.org/api/rest_v1/media/math/render/svg/32bf4d54c8e316178fca0b9f4a79dd0a0a34f34f

(1, m) は 行ベクトル

https://wikimedia.org/api/rest_v1/media/math/render/svg/507111acf945f5fe57c45ecc563ec02a4aff4a1b

(m, 1) はついつい横方向のベクトル、行ベクトルと思ってしまいますがこれは落とし穴で列ベクトルです。 慣れだとは思いますが。。

1次元ベクトルを列ベクトルに変換する方法

いったん2次元にしてから転置(transpose)する必要があります。 記述は 2パターンあります。

>>> data = np.array([1,2,3])
>>> data
array([1, 2, 3])

# 方法1
>>> data[:, None]
array([[1],
       [2],
       [3]])

# 方法1'
>>> data[:, np.newaxis]
array([[1],
       [2],
       [3]])

# 方法2
>>> np.array(data, ndmin=2).T
array([[1],
       [2],
       [3]])

2回目へ続く(はず。。)