CourseraのML Specializationを毎週分まとめていく(week 1 : Neural Networks and Deep Learning)
3行でまとめると
- ニューラルネットワークの層が増えたものがディープラーニング
- ディープラーニングにはCNNやRNNなどの手法のパターンがあり、画像認識や自然言語処理など用途によって使い分けられる
- ここ数年で解析対象のデータが増え、大量のデータがあれば高精度が望めることが要因となってDLが普及している
What is a neural network?
- 最もシンプルなニューラルネットワークの概念図
- 右側の、家のサイズに対して価格を決定するロジック部分をnodeという
- グラフのように、一定間隔0が続いて、その後上昇するグラフをReLUという
- より複雑になったニューラルネットワークのイメージ
- シンプルな時と同じくそれぞれの○がnodeであり、ReLUになりうる
- サイズとベッドの数によって住める人数が決まり、郵便番号によってアクセス性が決まり....という感じで、最終的に価格が決まる
- 一番左の4つがxにあたり、一番右がyにあたる
- 真ん中の層は隠れそうと呼ばれる
Supervised Learning with Neural Networks
- 機械学習の多くは教師あり
- 画像認識系のディープラーニングではCNNが使われることが多い
- 音声など、時系列のあるシーケンスデータではRNNが使われることが多い
- 各種のニューラルネットワークのイメージはこんな感じ(この時点ではよくわからない)
- ディープラーニングは構造化データと非構造化データの両方に使える
- 構造化データとは、データベースに入っているようなデータ
- 非構造化データとは、音声や画像のように、そのままでは扱えないデータ
- ここ数年で、猫の認識や翻訳などの非構造化データの分野が発展したが、ビジネスの世界では、広告などの短期的に効果の出やすい構造化データの分野が人気
Why is Deep Learning taking off?
- ニューラルネットワークはデータが多いほど効果を発揮する
- SVMなどの手法では、赤線のように一定以上のデータをうまく扱えない
- ニューラルネットワークは、パラメータや隠し層が増えるごとに、データが多い時の効果が上がっていく
- データが少ないと、手法による違いは出にくい
- 近年ニューラルネットワークが注目されているのは、データが増えたことと、処理が早くなったことが理由
- 処理がスケールしだした理由は、アルゴリズムの改良もある
- 左のシグモイド関数では、傾きが0になる部分が多い
- 右のReLUでは、0を超えたら常に傾きは1
- ニューラルネットワークではReLUがよく使われる
pythonのnumpy行列のtips
ここ最近はCourseraのdeer learning specializationと平行して 詳解 ディープラーニングを進めているのですが、これまでrを使っていたこともあり、pythonのnumpy関連で引っかかったところをメモ代わりに。
python初心者向けの内容です。
reshapeの引数の動き
numpy配列の整形をするreshapeメソッドの引数の渡し方について。
下記のように3*4の行列を1*12の行列に変換する際に()が二重になっていてなんじゃこれと。
a = np.random.randn(3, 4)
a = a.reshape*1
例えば、上記のようなコードではreshapeの第一引数に行列の形を指定することによって、整形を行っています。
1つの引数として(1, 12)を渡しているので、()が2重になるとのこと。
ちなみに、似た機能を持つresizeを利用すると、要素数に指定した形が一致していない場合、要素数に応じて削除や繰り返しを行ってくれます。いっぽう、reshapeでは要素数に形が一致しない場合にはエラーになります。
reshapeではエラー
hoge = np.random.randn(4, 7)
hogehoge = hoge.reshape*2
print(hogehoge)
ValueError Traceback (most recent call last)
<ipython-input-40-206422a1d141> in <module>()
1 hoge = np.random.randn(4, 7)
----> 2 hogehoge = hoge.reshape*3
3 print(hogehoge)ValueError: cannot reshape array of size 28 into shape (2,28)
resizeはいい感じにしてくれる
hoge = np.random.randn(4, 7)
hogehoge = np.resize(hoge, (2,28))
print(hogehoge)
[[ 0.17984156 -1.48711857 -1.87728238 0.18789091 -0.86492046 -1.76621145
-0.29362186 0.99425392 -0.63614095 -0.27467144 -2.11563702 0.07660544
1.46468977 -1.45524859 -0.00916827 -0.61070898 -0.67908168 1.37773914
0.25296565 0.0475988 0.47181726 0.14466797 -1.55518391 -0.0218339
-0.1627627 -1.21755984 0.12008514 1.81046075]
[ 0.17984156 -1.48711857 -1.87728238 0.18789091 -0.86492046 -1.76621145
-0.29362186 0.99425392 -0.63614095 -0.27467144 -2.11563702 0.07660544
1.46468977 -1.45524859 -0.00916827 -0.61070898 -0.67908168 1.37773914
0.25296565 0.0475988 0.47181726 0.14466797 -1.55518391 -0.0218339
-0.1627627 -1.21755984 0.12008514 1.81046075]]
入れ子構造になったarrayのshape
numpyのarrayでは行列を入れ子構造にできるのだが、行列作成時の引数の指定と構造の関係がすぐに分からなかったのでメモとして。
基本的には、例えばnp.random.randn(a, b, c, x, y)で生成した場合、(x, y)の行列をベースとして、まずは(x, y)がc個繋がり、次にそれがb個、最後にまたa個繋がってという感じになる。
hoge = np.random.randn(4, 3, 2, 2)
print(hoge)
[[[[-0.58394088 -0.69682622]
[-1.3257897 -0.25776192]][[ 1.26725302 -0.05233107]
[-0.24043602 -0.40466777]][[-2.43003962 1.0796623 ]
[-1.32372067 0.00298865]]]
[[[-0.75399924 -0.23905212]
[-0.50676904 1.61758912]][[-0.57973531 0.43609008]
[ 0.4742734 0.51253294]][[ 0.61526245 -0.49094768]
[ 0.70260153 1.46168456]]]
[[[-0.53245236 -0.09998614]
[ 0.20760135 0.27993352]][[ 0.56461812 2.28180134]
[ 0.33748457 1.07951289]][[-2.03471952 -0.17823477]
[-0.83554739 -1.74027867]]]
[[[ 0.89970965 -0.63134293]
[ 0.21429068 0.63303917]][[ 0.84023875 0.03602931]
[-0.15912151 -1.948296 ]][[ 0.67663275 -0.44216258]
[ 0.44355083 -0.56121392]]]]
ただ、(x, y)が繋がった移行の行と列の概念が分からんままです。。
行列の形確認に便利なshape
shape関数で行列の形を確認できる。
a.shape
Andrew NgもCourseraで適宜shapeで確認することを推奨していました。
個人的ディープラーニング学習マイルストーン
色々と調べてみて、下記をやっていくことに。
Coursera : Deep Learning Specialization
ある程度は体系的に学べるということでベースとしてはこちらをやっていくことに。以前に同じく Coursera の Machine Learning を修
了して、それもとてもよかったので。
Google AI
Google が無料で公開してくれている Google AI。
ディープラーニングの理解に役立つコンテンツがいくつか用意されているので一通り目を通してみたい。
あまり体系的ではないようなので、空いた時間に見る感じかな。
Deep Learning の学習過程を視覚的に操作・確認できる Deep Playground がおもしろそう。
詳細 ディープラーニング
Couesera の動画では細かい部分まで理解仕切れない特があるので、そういった箇所は下記のディープラーニング本で追いかける感じで理解を深めていこうかなと。
詳解 ディープラーニング ~TensorFlow・Kerasによる時系列データ処理~
- 作者: 巣籠悠輔
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/05/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
辛勝!リヴァプール vs マンチェスター・シティ【17-18 CL】
本日チャンピオンズリーグの準々決勝2nd leg、リヴァプール対マンチェスター・シティ戦がおこなわれ、リヴァプールが2-1で辛勝しました!
トータルスコア 5-1 で準決勝にリヴァプールが進出しました。
特に前半は、シティに押し込まれる内容でしたが、なんとか勝ちきって準決勝に進めたのは大きいかなと!
前半からかなり前掛かりに押し込んで来たシティ
前半開始早々にファン・ダイクのパスをカットされて失点する展開に。
リヴァポファンとしては、スターリングのプレスからボールカットに繋がったのも悔しい点ですね。
失点の場面を改めて見てみると、ボールロスト前にファン・ダイクがサイドに流れた時点でリヴァプールにはフリーな受けてがおらず、すでにシティの守備体制が整っている事が分かります。
さらに、ボールを奪ってからも前線の右サイドだけで4人がラッシュしており、シティのポジティブ・ネガティブトランジションのうまさを感じる場面でした。
このファン・ダイクのパスの受け手がいない問題に関しては、シティのギュンドがいいお手本を見せてくれていました。
この場面ではCBのパス回しが滞ったタイミングでギュンドがすっと下がってきて、リヴァポのMF2人を釣りだしています。
リヴァプールにもこういった動きをする選手がもっといるとバックラインから前線へのボール移動がスムーズになるのかなと思うのですが、本日サスペンションで出られなかったヘンドがそういった役割をこなしてくれるかと!
ここら辺のスイートスポットの使い方については、footbalista 3月号に詳しくかかれていました。
月刊footballista (フットボリスタ) 2018年 03月号 [雑誌]
- 作者: footballista
- 出版社/メーカー: ソル・メディア
- 発売日: 2018/02/10
- メディア: Kindle版
- この商品を含むブログを見る
チェンバレン好調!
こちらの場面、得点には惜しくも繋がりませんでしたが、チェンバレンが非常にいい動きをしていました!
はじめにボールを持っているフィルミーノも3人のプレスを軽くいなしていてさすがなのですが、そこから右サイドのサラーにパスを出して、こぼれたところをチェンバレンが拾っています。
その後、サラーとのワンツーをしてシュートまで。
おしくもゴールにはなりませんでしたが、サラーを壁にして抜け出たところなんかはアーセナル出身らしさを感じるところでしたね。
チェンバレンは体の強さもありますし、こういった組あても器用にできる選手だと思うので今後にはもっと期待してしまします。
サラー、マネ、フィルミーノ!!
今日の試合は前半から押し込まれる展開が続いていましたが、サラーの1点目でリヴァプールの流れになり、フィルミーノのダメ押しで試合が決定的に!
この前線はボールへのプレスも猛烈にかけてくれますし、なによりもつらい局面でも点を取ってくれるのは本当にありがたいですね。