はじめに
2020年5月11日~2020年6月11日までの丸々1ヶ月間、ほとんどの時間を機械学習の勉強に費やすと、どこまで到達できるかを実験したくなりこの企画を始めました。
この記事ではその勉強の記録をまとめています。
そもそもこの企画をやってみようと思ったのは、機械学習をゼロから1ヵ月間勉強し続けた結果という記事を読んだことがきっかけです。
自分の記事も、これから機械学習の勉強を始める際のきっかけになると幸いです。
事前知識
プログラミング経験はhtml,cssを多少いじったことがある、progateのpythonは途中までやった気がする、程度のプログラミング初心者です。
機械学習関連の書籍としては
人工知能は人間を超えるか
今こそ知りたいAIビジネス
機械学習エンジニアになりたい人のための本
を事前に読んでいました。
ゴール設定
自分は1ヶ月後のゴールを
Kaggleに参加できるレベルになる事。
として定めました。Kaggleはgoogleの運営する世界中の機械学習・データサイエンスに携わっている約40万人の方が集まるコミニティーです。コンペで順位を争うのがなんとなく楽しそう!という理由でこれに参加できるようになれたらいいなあというのを目標として設定しました。
結果として、この目標は達成することができました。
#1ヶ月で扱った教材
さっそく自分が1ヶ月で使用した教材をまとめていきます。コメントやオススメ度も書いていきます。()に書かれているのがその教材を勉強した日にちです。
coursera machine learning(2日目〜9日目)
オススメ度 ★★★★★
coursera machine learningは、Stanford大学の機械学習を担当しているAndrewNg先生の授業で、オンラインで受講できます。世界ですでに300万人以上が受講している非常に人気の講座です。機械学習を全く勉強したことのない人でもわかりやすく説明してもらえるので非常にオススメ。僕はこれを最初にやったおかげで比較的効率的に勉強を進めていくことができたかなと思っています。最後に課金すると修了証がもらえるのもモチベが上がるポイントだったりします。
DataCamp(10日目)
オススメ度 ★★★☆☆
最初の1週間は無料でできるということでやってみることにしました。具体的には「Introduction to python」、「Intermedical python」、「Python data science tool box(part1) 」、「Python data science tool box(part2)」という4つのコースを行いました。
datacampは海外のprogateを進化させたバージョンみたいな感じで、最初に動画で解説→progateのようにコードを書いていくスタイルです。機械学習はpythonが用いられるケースがほとんどですが、coursera machine learningではpythonではなくOctaveというプログラミング言語を用いるため、新たにpythonを勉強する必要がありこちらの講座を受講しました。自動翻訳の日本語字幕があるものの、後半2コースはnumpy,pandasに深く入り込んでいき、内容が結構難しくて大変でした。コードを書く部分は、指示がすべて英語なので、英語が全く苦手という方は難しいかもしれません。個人的には、先に「python入門ノート」をやってからこちらをやる方が良かったなと思います。
python3 入門ノート(11日目)
オススメ度 ★★★★☆
python3入門ノートはpythonの勉強の1冊目としてオススメです。こちらをやったおかげでDataCamp何となくでしかわかっていなかった部分がしっかり理解できるようになりました。注意点として、numpyの解説は充実しているのですが、pandasに半ページしか割かれていないのでそこは新たに勉強する必要があるでしょう。それこそDataCampはpandasの解説が充実していたので、python3入門ノートの後にやってみるのがオススメです。
ゼロから作るディープラーニング(12~13日目)
オススメ度 ★★★★☆
ディープラーニングが機械学習の中でも特に興味がある分野なので、amazonなどでも評価の高いこの本は是非とも読みたいと思っていました。
ゼロから作るディープラーニングは現段階ではまだ難しいかなと思いきや、ディープラーニングを全く学習したことがない人に向けてゼロから解説することをモットーとして書かれている本なので、pythonを一通り学んだ人であれば十分理解できました。最初に軽くpythonの解説もありますが、流石にこれだけだと厳しいので、python入門ノートなどで勉強してから取り組むことをオススメします。
また、前半のニューラルネットワーク〜誤差逆伝播まではcoursera machine learning で扱った部分なので、一度受講しているとかなり読みやすいです。tensorflowなどのフレームワークに頼らず、ゼロから実装していくのが難しいですが、非常に勉強になります。
pythonではじめる機械学習(13~14日目)
オススメ度 ★★★★☆
pythonではじめる機械学習はscikit-learnと呼ばれる機械学習ライブラリを用いて、様々な機械学習モデルを実装していくための本です。coursera machine learningの後にやることをオススメします。なぜかというと、それぞれのモデルに関してのバックにある数学的な知識の解説は少なく、その実装に重きが置かれているためです。courseraで背景の知識があるとより勉強しやすくなるのではないかと思います。自分はこの本で、今まで学んできたことがちゃんとpythonでも実装できるんだ!という感覚をつかむことができました。一度で全てを理解するのではなく、使いたいときに毎回参照するような辞書的な立場の本かと思います。
Kaggleで勝つデータ分析の技術(15~18日)
オススメ度 ★★★★★
Kaggleで勝つデータ分析の技術はKaggleをやる上では必読とも言えるでしょう。
特微量作成→モデルの作成→モデルの評価→チューニング→アンサンブルというkaggle全体を通して行う作業が網羅されており、どのような手順でデータの分析を行っていけば良いのかがわかります。内容はpythonではじめる機械学習とかぶる部分もありますが、kaggleに必要な部分によりフォーカスして書かれています。特に特微量作成がより重点的に書かれているのが痒い所に手が届く感じです。また、著者の方が実際にkaggleを通して得た知見が余すことなく書かれているのもかなり良いです。これ一冊でkaggleを戦うことができるでしょう。
Udemy python for time series data analysis(19~20日目)
オススメ度 ★★☆☆☆
こちらはKaggleのコンペ「M5」をやる上で時系列データの扱いを学びたくて受講しました。ちょうどUdemyのセールがやっていたので1200円ほどで購入しました。結論から言うと、教え方がちょっと単調気味で自分にはそこまで合っていなかったように思います。またARIMAなどここはまだ勉強しなくてもいいかな、と思う部分があったため2日やって途中でやめました。
coursera deep learning(21~27日目)
オススメ度 ★★★★☆
cousera machine learningがあまりに良かったので、またAndrewの授業が受けたくなり、こちらも受講することにしました。調べているとPython覚えて3ヶ月の素人がCoursera Deep Learning Specializationを1週間で完走した話という記事を発見し、1週間で受講が完了するとなんと無料で修了証まで発行できることがわかりました。これは少しでも節約したい学生にとってはなんとも嬉しい。前半のニューラルネットワークやプロジェクトの進め方の話はmachine learningと内容が被っていたのでスピードを出して受講し、後半のCNN、RNNの方に十分な時間を割くようにしました。ということで、上の記事を参考にしつつ何とか1週間以内に受講を終えることができました。しかし、受講し終えた翌日、メールでcourseraから**「DeepLearningのコース自動で課金しといたよ」**というメールが届き、その時初めて1週間以内に解約しなければいけなかったことを知り泣きたくなりました。みなさん1週間でチャレンジするときには最後に解約することをお忘れなく、、!
Kaggle(28~30日目)
オススメ度 ★★★★★
実際のデータを扱うことができ、さらにその助けとなるnotebookがたくさん公開されているのでそれを読んでいるだけでも非常に勉強になります。
また、public boradで世界中の人とランキングで競うことができるというゲーム要素もあります。勉強環境としては最高です。
勉強の進め方
自分がどのように勉強を進めていったか、難易度(主観です)、かかった時間、感想などを記録として書いておきます。
メモで残していたものの貼り付けで冗長な文章となっております。
以下はただのポエムなので、暇で暇で仕方がないという方以外は読まないことをオススメします。
1日目
どのように勉強していくか、機械学習とはそもそも何なのかの情報収集しました。
様々な勉強法に関するサイトを参考にさせていただきました。
特に役立ったもののリンクを貼っておきます。
勉強法に関して
【保存版・初心者向け】独学でAIエンジニアになりたい人向けのオススメの勉強方法
【独学可能】Python初心者のための機械学習に向けた学習ロードマップ
機械学習の概要
AI技術をぱっと理解する(基礎編)
ちんちゃんねるAIエンジニア
2日目
coursera Machine Learning WEEK1終了
かかった時間:4.5時間
難易度:★★☆☆☆
内容
イントロダクション
・教師あり学習、教師なし学習について
・今後の進め方についてざっくりと説明
目的関数
・家の広さから家の売却価格を予想するために線形回帰を行う
・式での表し方とグラフ化
最急降下法
・微分を用いた式での表し方
・αの大きさがもたらす影響
・線形回帰と組み合わせたアルゴリズム
行列・ベクトル
・行列の四則演算、行列同士の掛け算
・単位行列、逆行列、転置行列
WEEK1
授業は英語ですが、日本語字幕がちゃんとしているので(たまーにずれている動画もあるけど)、問題なく理解する事ができます。そしてAndrew Ng先生は非常に教えるのが上手で、つまずかないようにかなり丁寧に説明してくれている印象的でした。動画の合間に、動画が止まってちょくちょく確認問題が出てくるのでしっかりと理解しながら進める事ができます。また、セクションごとにもう少しちゃんとした確認テストもあって、かなり良くできている教材だなあと思います。
week1はコーディングはせず、基本的な理論の説明という感じです。
特に微分やΣなど数学的な要素が多く出てくるので、かなり懐かしい気持ちで聞いていました。行列なんかは高校でやらなかったので、まさかの医学部6年生になって今さら行列を勉強するとは思ってもみませんでした。笑
最急降下法なんかはグラフやイメージで理解できて、かなり面白かったです。
Machine Learning week2 途中まで
途中まで:4時間
難易度:★★☆☆☆
とりあえず半分くらいまで進めました。
3日目
Machine Learning WEEK2終了
かかった時間:7.5時間
難易度:★★★☆☆
内容
環境構築
・Octaveのインストール
重回帰分析
・Multiple features
・最急降下法
・Feature scaling
・多項式回帰
パラメータ計算
・正規方程式
Octaveチュートリアル
・基本的な操作
・ベクトル化
week2
week2はかなり内容も濃く、充実した回だったように思います。
week1とweek2の途中までで学んできた数学的な理論の部分を実際にOctaveで実装していくフェーズへと入りました。week2の最後に自分でプログラミングをして提出しなければならない課題があるのですが、その説明文がA4のpfd15枚という分量でもちろん全て英語で書かれているので、特に大変でした。
中でも最急降下法(Gradient Descent)を実際にコーディングする部分で苦戦しました。もうちょっと誘導があっても良かったような。途中どつぼにハマってしまい、数学の難問にハマって抜け出せない感じを思い出しました。
学んだ事をいざイチから自力で実装しようとすると、自分が完璧には理解できていない事を認識させられます。医学の勉強にしててもそうですが、やはりアウトプットはとても大事ですね。。
ちゃんと正しいコーディングを提出すると、提出した項目ごとに点数がつくので、項目ごとに正解している事を確認しながら次に進める事ができます。(今回は後半はオプションでやってもやらなくてもいいって感じでした)
やはり実際のコーディング課題になると、今までのお遊び小テストからは難易度が一気に上がるのでstep3はしっかり復習を兼ねつつ進めていくのが良さそうです。
WEEK3を途中まで
途中まで:5時間
難易度:★★☆☆☆
ロジスティック回帰に入りました。
勉強しながら意識すべき事
以下、courseraを勉強しながら意識すべきポイントをまとめてみます。
・各回(10~15分)の動画を完璧に理解してから次へと進む。
・そのために、コーディングは動画の解説と同時に行うだけでなく、動画の終了時にもイチから自分でできるかどうかを試して次に進む。
・書いたコードは記録しておき、後から参照できるようにしておく。
・コーディングがない場合は、内容を自力で説明できるようになってから次に進む。
・ノートにメモを取る。
4日目
Machine Learning WEEK3 終了
全部でかかった時間:14時間(昨日の5時間含む)
難易度:★★☆☆☆
内容
分類
・仮説表現
・決定境界
ロジスティック回帰
・コスト関数
・コスト関数の単純化と最急降下法
・Advanced optimization
多クラス分類
・one vs all
過剰適合
・線形回帰の正規化
・ロジスティック回帰の正規化
week3
WEEK3が今までで一番時間がかかりました。
内容自体はかなりわかりやすく説明されていますが、WEEK2の復習やノートを丁寧にまとめながら進めていったので、予想以上に時間がかかりました。ただこれを見るだけで十分復習ができそうです。
そして最後のプログラミング課題が、普段全くプログラミングをやらないせいで、とても時間がかかっています。
コーディングに時間がかかるというより、コードのミスを探すのにかなり時間がかかってしまった印象です。これに関しては手を動かして書いていって、慣れていくしかないですね。
ただこの講座では理論を理解することに重点を置いて、Octaveでのコーディングをしっかりマスターするというよりも、pythonを学んだタイミングで習った事をしっかりコーディングできるようにしていきたいです。
なんとか課題では時間はかかりながらもweek3まで終えることができてホッとしています。
そしてweek3の最後の動画でAndrewNg先生から
「君たちはこの時点でシリコンバレーで機械学習で稼いでいる人たちの多くのレベルを超えているよ」という言葉をいただきました。
絶対そんなことはないと思うけど笑
5日目
Machine Learning WEEK4 終了
全部でかかった時間:7時間
難易度:★★☆☆☆
内容
導入
・ニューラルネットワークの成り立ち
ニューラルネットワーク
・Forward Propagation
・ベクトル化
ニューラルネットワークの適応
・AND, NOT
・XOR, XNOR
・多クラス分類
week4
WEEK4は比較的時間をかけずに終わらせることができました。
ニューラルネットワークに関してはWEEK5にも続くので内容としてはまだ土台となる部分だけだったように思います。
今まであやふやだったニューラルネットワークの仕組みがここでしっかりと勉強できたのはとても楽しかったです。この仕組みは計算量は膨大になりそうですが、現在ディープラーニングへと発展して使われている所以がわかりました。ディープラーニングに関しても早く学びたいです。それにしても行列ってほんと便利ですね。。
また、プログラミング課題の題材も、サンプルの手書き数字画像を0~9に自動で割り振るというアルゴリズムで、それが完成した時は感動しました。今回は普段より時間をかけず課題を終わらせることができました。最初は具体値で考えること、ターミナル上でコーディングして手を動かすことで、こまめに試してみることが大事そうです。
Machine Learning WEEK5 プログラミング課題直前まで
かかった時間:5時間
難易度:★★★☆☆
backpropagationのアルゴリズムがかなり複雑になってきております。実装できるのかどうかが不安です。。
6日目
Machine Learning WEEK5 終了
全部でかかった時間:9時間(昨日の5時間含む)
難易度:★★★☆☆
内容
コスト関数と誤差逆伝播法
・誤差逆伝播アルゴリズム
・誤差逆伝播法のイメージ
誤差逆伝播法の実装における注意
・Unrolling prameters
・Gradient checking
・Random Initialization
(この辺適切な日本語訳がない..)
・全てを合わせる
week5
WEEK4に引き続き、ニューラルネットワークの回でした。
内容はbackpropagationについてがほとんどで、それをいかにして実装していくかという部分にフォーカスされていました。
やっている事を式にするとかなり複雑であり、実際アルゴリズム自体が複雑です。
なのでこれをイチから自分で書けと言われるとちょっと厳しい気もします。まとめたノートを見つつ繰り返しで身につけていくしかないですね。
課題自体はかなり誘導がされていて今回は解きやすかったように感じました。
それにしても毎回思いますが、この課題は本当によくできていますね。。授業内容の理解にはうってつけです。
課題の最後で実際にニューラルネットワークのアルゴリズムを動かして、Iterationを400にすると99%以上の精度を出すことができました。その分計算に結構時間がかかっていて(15分くらい?)、今までの計算でこんなに時間がかかっていることはなかったので、計算量の膨大さを実感しました。
何はともあれニューラルネットワークはマジですごいですね。マジで強力なツール感が半端ないです。
Machine Learning WEEK6 終了
全部でかかった時間:7.5時間
難易度:★★★☆☆
内容
学習アルゴリズムの評価
・Train/Cross Validation/test error
Bias vs Variance
・Train/Cross Validation error の表示
・lambdaの選び方
・Learning curves
・Large errorが起こった時の対処法
・Neural Networkとoverfitting
スパムメール分類器を作る
・エラー分析
歪みデータ
・精度と再現率
・F1score
機械学習におけるデータの重要性
・大きなデータ適用に関する論理的解釈
week6
今回は将来的に機械学習を実装するにあたって注意しておいたほうが良いtipsを習いました。
特に強調されていたのが、エラーが発生した際に盲目的にデータの数を増やそうとしたり、フィーチャーの数を増やそうとするのではなくて、何が原因なのか(bias vs variance)を見極めて何をすべきかを考えよ、ということです。
かなり実践に近い内容で、いざ機械学習を利用しようと思った時にまずぶち当たる壁に対してあらかじめ答えを用意しておいてくれている回でとても勉強になりました。
今回習ったことは実際に機械学習を実用化する時まで頭に入れておきます。
特に共感したのが、意思決定のスピードを上げるための数的な指標を用意せよ、という点です。ビジネスの世界では根拠が明確にない状態での意思決定が求められます。それによって今後の結果が大きく変わったりするので、経営者に求められる大事なスキルの一つです。なので、その難しい意思決定はできるだけデータドリブンであるべきであり、今回学んだような数的指標があるだけでその質に大きな差が出るわけです。
実践的なことまで考えて教えてくれている点は、Ng先生がさすがだなと思わざるを得ません。
7日目
Machine Learning WEEK7 途中まで
かかった時間:4時間
難易度:★★★☆☆
内容
SVM(Support Vector Machine)
・Large margin intuition
・SVM決定境界
・SVMの数学的背景
Kernels
・Kernelとは
・ランドマークを決める
・Gaussian Kernels
SVMの実践的活用
・liner kernelとgaussian kernel
・そのほかのkernel
・多クラス分類
・ロジスティック回帰 vs Kernel
week7
今回はSVMを主に扱ったが、SVMがやっていることの感覚を理解するまでにかなりのステップがあったので、今までのアルゴリズムに比べると一番理解が難しかったように思います。
similarity(どれだけ近い値か)という概念を取り入れることによってより複雑な非線形関数を導くことができるという発想にはなるほどな、と感じました。
8日目
Machine Learning WEEK7 プログラミング課題終了
全部でかかった時間:7時間(昨日の4時間含む)
難易度:★★☆☆☆
week7
今回のプログラミング課題は前半はSVM、後半はスパムメール分類器のアルゴリズムです。
実際にスパムメール分類器を実装できるところまで課題が組まれているのでやっていて非常に面白かったです。本当に課題がよくできていますね、1週分につき5000円くらいとってもいいレベルです。これが無料でできるって本当にいい時代。。
Machine Learning WEEK8 終了
全部でかかった時間:8時間
難易度:★★☆☆☆
内容
クラスタリング
・K平均法
・コスト関数
・random initialization
・クラス数Kの選び方
次元削減
・データ圧縮
・ビジュアル化
・主成分分析(PCA)
・reconstruction
・PCA適応のアドバイス
week8
WEEK8は教師なし学習について扱いました。
K平均法はアルゴリズムが非常にシンプルな割にやっていることはとても面白いので、かなり汎用性がありそうだと感じました。課題では画像の容量を圧縮するために、圧縮後の各ピクセルの色を16色に限定して、各ピクセルがどの色に該当するかをクラスタリングしました。なんかこういうエフェクト見たことあるなあっていう画像が出来上がります。
PCAについてはロジスティック回帰やニューラルネットワークなどの教師あり学習でも応用できるし、使う頻度もかなり高そうです。やっていることも感覚的に理解しやすいです。なぜ分散共分散行列を計算するとPCAがうまくいくのかは非常に気になりましたが、、
課題では人の顔画像データの特微量をPCAによって下げるということをやりました。データサイズは1/10になるにも関わらず、reconstructionしたらちゃんと元の画像に近いものに戻っていたのが意外でした。
9日目
Machine Learning WEEK9 終了
全部でかかった時間:9時間
難易度:★★☆☆☆
内容
異常検知
・ガウス分布
・アルゴリズム
・異常検知vs教師あり学習
・特微量の決め方
多変量ガウス分布
・異常検知
・original model vs 多変量ガウス分布
Recommendation system
・協調フィルタリング
・low rank matrix factorization
week9
教師なし学習の続きです。前半の異常検知は分布からいかにそれるかを数学的に計算する手法であり、感覚的にもかなりわかりやすかったです。
後半は映画のレビューサイトでオススメの映画を表示する仕組みを例にして、recommendation systemを学びました。いきなり具体例から入っていったのでかなり面白く授業を聞けました。プログラミング課題は実際に映画レビューのデータを学習させて、自分の好みの映画を入れるとオススメの映画を表示するアルゴリズムを実装できたのがかなり楽しかったです。
課題自体はベクトル化して考えるとほんの数行で書けてしまい、改めてOctaveの利便性を実感しました。(pythonでやったことないので比較はまだできませんが、、)
最後の集大成のプログラミング課題でしたが今までで一番スムーズにいけた気がします。recommendation systemは自分で実装できたらかなり面白そうです。
Machine Learning WEEK10,11 終了
全部でかかった時間:3.5時間
難易度:★★☆☆☆
内容
大きなデータセットにおける最急降下法
・バッチ最急降下法
・確率的最急降下法
・ミニバッチ最急降下法
発展的トピック
・オンラインラーニング
・Map reduce
Photo OCR
・Sliding window
・データ生成の方法
・ceiling analysis
Last message
week10,11
プログラミング課題はなく小テストだけなので、気楽に授業を聞けました。
今まで習ったことに対しての補足や、実践的に機械学習を行う際の流れ、実装で注意すべきポイントを学びました。かなり実践的なアドバイスもあり、(10倍のデータを得るためにはどれくらいの時間がかかるか自問せよ、など)最後の最後まで重要な内容でした。
特に実際にphotoOCRのアルゴリズムを実装するためにはどのような過程があるのか、今まで自分たちが習ったアルゴリズムに分解して示されたことで、今まで習ったことを応用すればここまでできてしまうのか、と驚きました。また、オンラインラーニングなどは身近なところでもたくさん使われていて、グノシーなんかもこれを使ってニュースを個人にカスタマイズしているのだと思います。
最後のメッセージも良かったです。。AndrewNg先生は生徒のことを本当によく想像して、もしくは知っているのだなと思います。つまずきやすいポイントを完璧に理解しているので、そこは説明を増やすなどの工夫があり、初学者の自分でもほぼ完璧に授業の内容は理解することができました。
これが無料で受けられてしまうなんて素晴らしいですね。
お金を払ってでも十分満足できるコースだと感じていたので、課金して記念に修了証を発行しました。
10日目
Introduction to python
かかった時間:2.5時間
難易度:★☆☆☆☆
Intermedical python
かかった時間:5時間
難易度:★★☆☆☆
Python data science tool box(part1)
かかった時間:2.5時間
難易度:★★★☆☆
Python data science tool box(part2)
かかった時間:3.5時間
難易度:★★★★☆
今まで扱ってきたOctaveとは勝手が違う点が多くてかなり戸惑いました。初日にしてはかなり深い内容まで踏み込んでしまったように思います。特に最後のコースでは集中力も切れてきて、内容がうまく頭に入ってきませんでした。
「入門ノート」使って基本的なことの確認をもう一度行いたいと思います。
DataCampのサービス自体は良かったです。
内容はprogateに動画の解説をプラスして内容もかなり充実させたバージョンです。コンテンツ量がかなり膨大であり、広い難易度をカバーしている点がprogateとは大きく異なる。ゲーム形式で経験値が溜まっていく感じは同じです。
11日目
python3入門ノート
かかった時間:13時間
難易度:★★☆☆☆
内容
・変数
・ライブラリ
・条件、繰り返し、例外
・リスト
・タプル
・セット
・辞書
・ユーザー定義関数
・関数の高度な利用
・クラス定義
・ファイル読み込み
・matplotlib
・NumPy
・機械学習を試そう
この本はpythonをインストールするところから始まっており、初心者の人でもとても勉強しやすいように設計されています。
DataCampすでに理解できている部分は流し読みしつつ、適宜コードを書きながら進めていきました。昨日のコースよりも内容が網羅されていて先にこっちをやったら良かったなーと思いました。
内容の多くが昨日扱ったものだったのでスムーズに進めることができました。ただ、内容を現段階で全て暗記するの無理なので、「こんなメソッドあったよね」くらいに理解しておいてまたこの本に戻ってくるのが良いのかなと思っています。
pythonの勉強だけだとちょっと飽きてしまうので早速明日から、機械学習の勉強をしながら実際にpythonを使っていきます。
12日目
ゼロから作るDeepLearning
かかった時間:11時間
難易度:★★★☆☆
第1章:python入門
ゼロから始めることをこの本のコンセプトとしており、pythonの入門まで付いています。一応python未経験でも理解はできそうですが、基礎を一通りやってから取り組むのが良いと思います。
第2章:パーセプトロン
この辺りはcouseraの機械学習ですでに学んだのでスムーズに進みます。
第3章:ニューラルネットワーク
内容自体はcouseraですでに扱ったものなので理解しやすかったです。あとは、それをpythonでどう実装するかを学んでいるイメージです。aとzの使い方がcouseraの時とは逆だったりとちょっと違和感を感じるところが多々ありましたがこちらで慣れます。。
行列の計算の仕方から丁寧に説明してくれているのでcouseraをやっていなくても十分安心して学べます。
個人的には勾配法の説明はcouseraの方がわかりやすかったかなと思います。
第4章:ニューラルネットワークの学習
この章から実装量も増えてきてだいぶ時間がかかりました。
第5章:誤差逆伝播法
この章は非常に勉強になりました。couseraでは誤差逆伝播法は直感的なイメージをなんとなく理解して最終的には式を覚えようという感じでしたが、この章では具体例を用いてかなり噛み砕いて説明されていたのがわかりやすかったです。
また、couseraと実装の仕方も異なっていました。こちらではlayerごとにクラスを作り、それぞれでforward,backwardのメソッドを作ることによってそれらを、レゴのように組み合わせて一気に作用させるというやり方です。この発想が非常に面白いなあと思いました。pythonだからこそできるやり方ですね。これであればlayerが増えようとも簡単に実装できそうです。
第6章:学習に関するテクニック
パラメータの更新方法の違いや、初期値の設定、batch normalizationなど、実際にニューラルネットワークの学習を行う上でのテクニックが載っています。
この章はcouseraよりもかなり深いところまで説明されているのでおすすめです。論文の結果などを用いて、例えばパラメータ更新方法の違いによって損失関数の値の変化をグラフで見れたりするのでとても参考になります。割と最近できた手法も載っていたりします。
13日目
ゼロから作るDeepLearning
かかった時間:6時間
難易度:★★★★☆
第7章:畳み込みニューラルネットワーク
画像認識に用いられているCNNについての章です。結構内容が難しくて、何回も読み直したりしたのでこの章に5時間くらいかかりました。。とても複雑ですが、コードがまさにパーツを当てはめていく感じで使いこなせたらかなり楽しいだろうなと思います。最後に実際に学習させたところ1時間くらいかかりました、さすがニューラルネットワーク、時間かかりますね。。
第8章:ディープラーニング
この章は実装ではなく、認識精度をさらに高めていくためにはディープラーニングという技術が有用であり、どのようなネットワークがこれまで構築されてきたかといったような話でした。またディープラーニングが現実ではどのような事例に応用されているのかが解説されています。
ゼロから作るDeepLearningについて
pythonの知識面が不安だったのですが、python入門ノートをやったレベルで十分対応可能でした。pythonの文法で忘れてしまった部分はググったり入門ノート読み返すというのを繰り返して実際に書きながら学んでいくのが良さそうです。
内容としては全くの初学者からでもおおよそ理解できるだろうな、というレベルで易しく書かれています。機械学習を学びたてのタイミングでも、ディープラーニングって結局何なん?というのがこの1冊でわかるのではないでしょうか。
最終的にはニューラルネットワークを自分で実装できるようになってしまうので、かなりよく出来ている本だなと感じました。
自分はcouseraで一度機械学習について学んだあとで読んだので、重複している部分が多々ありましたが、違う角度からの説明であり、より理解は深まったかと思います。とてもオススメできる一冊でした。
Pythonではじめる機械学習
かかった時間:6.5時間
難易度:★★★☆☆
第1章:はじめに
NumPyやpandasなどの導入などです。pythonを一度も触ったことのない人にとっては難易度が高く感じてしまうと思います。
第2章:教師あり学習
かなりヘビーでしたがとても勉強になりました。
特にcouseraで理論がわかっていると、それをpythonのscikit-learnを使うとどのように実装できるのか、実践的な部分が学べてとても勉強になります。
理論に関してはスペースが割かれていないので
・理論→cousera
・pythonでの実装→pythonではじめる機械学習
とお互いに補完するポジションとして勉強すると効率よく勉強できると思います。
また、couseraでは扱っていない決定木、ランダムフォレスト、勾配ブースティング回帰木について勉強できたのが良かったです。
注意点としては、やたらmglearnというライブラリを用いたコードが出てきて、最初はそれも写経していたのですが、たまに動かないこともあったりしたのでやめました。基本的には視覚的に解説するときにグラフの作成で用いられることが多いので、mglearnの部分は無視してしまっていいと思います。
逆にscikit-learnには様々なデータセットが用意されているので(2章の最初で紹介される)、実際にそれぞれのアルゴリズムをそれらのデータセットに入れてみて試しながら進めるのが良いかと。
14日目
pythonではじめる機械学習
かかった時間:11.5時間
難易度:★★★★☆
第3章:教師なし学習と前処理
前処理、次元削減、PCA、K平均法はすでにcouseraで扱った項目で、schikit-learnでの実装方法が学べました。特微量の抽出なんかは主成分ベクトルが可視化されていて感覚的にわかりやすい解説でした。NMF、t-SNEは新たに学んだアルゴリズムでしたが、そんなものもあるのかという感じで、中身は結構ブラックボックスに感じました。クラスタリングの凝集型クラスタリング、DBSCANも初めて知りましたが、それぞれの仕組みはざっくりと理解できて、どのような場合に向いているかも知ることができました。
第4章:データの表現と特微量エンジニアリング
この章はcouseraでは学んでないことが多く出てきましたが、実際のデータをもとに解析をし始めてみないとイメージが掴みにくいかなと感じました。特微量エンジニアリングが必要になったタイミングでまた読み直したいと思います。
カテゴリ変数に関しては、実際のデータを扱う上ではかなり大事になってくる部分だと感じました。自動特微量選択は便利だと感じましたが、中身がかなりブラックボックスです。。
第5章:モデルの評価と改良
モデルの評価に関してcouseraよりもかなり深いレベルで学べました。交差検証やグリッドサーチを行う際にはscikit-leanにはとても便利なクラスが提供されており、それらを実際に実装できます。また、可視化することによってモデル評価をより効率的にできることもこの章での大きな学びでした。ただ、モデルの評価に関しては実際のデータで自分で試してみないと腹落ちして理解するのは難しいです。。
第6章:アルゴリズムチェーンとパイプライン
パイプラインはかなり有用なテクニックであり、活用できるとかなり効率的にコードを書けそうです。
第7章:テキストデータの処理
映画レビューのセンチメント分析を使って、どうやってテキストデータを処理していくかを学べます。精度をいかにして上げていくかという実践的な過程が見られてとても面白いです。couseraのスパムメール処理で用いられる内容も出てきます。
第8章:おわりに
深掘りするためには次はこんなことを勉強するといいよ、といったことが書かれています。
pythonではじめる機械学習について
ゼロから作るディープラーニングと比べるとサイズも大きいし、なんとなく内容も難しそうだと感じていたのですが、アマゾンなどでも高評価なこともあって、日本語訳も読みやすく図を使った説明もわかりやすくて、かなり学びの多い本でした。
特にpythonでの具体的な実装方法がわかったので、この本を見ながらコードを書いていけば機械学習は実装できるなという感覚を掴めたのが大きかったです。ただもちろん一回読んだだけでは、自分のものにできるまで程遠く、この本を何度も見返しながら実装をしていきたいと思います。
15日目
Kaggleで勝つ データ分析の技術 第1章
第1章ではKaggleって何?というところから、参加から提出までの流れ、参加の意義、実際にどのように分析をしていくかの流れが解説されています。分析の流れはKaggleのタイタニックチュートリアルを用いて解説されています。
Kaggleについて色々調べた
主にこちらのサイトに載っているものを軸にみていきました。
kaggle初心者ガイド
Kaggleに登録して、タイタニックをやってみた
自分もタイタニックを用いて実際に分析してみました。一応scikit-leanは勉強したのでその知識を使いながら、実際に試してみました。
16日目
Kaggleで勝つ データ分析の技術 第2章
タスクと評価指標についてです。
評価指標の種類とそれを最適化するためのアプローチが書かれています。
ちなみに現在参加しているM5の評価指標はRMSLEです。
M5のnotebookを読み漁る
よくわからないながらも定石通り、notebookをmostvotesで並び替えて上から読んでいっています。最初はEDAを2、3個読みつつ、ポイントをノートでまとめていきました。
次にYakovlev氏が書いている一連のnotebookを読み進めていきました。
1行1行理解していくだけでもめっちゃ時間がかかりますが、ただ本を眺めているだけよりも圧倒的に勉強になります。対応する部分を「kaggleで勝つデータ分析の技術」で調べたりググったりで案外対応できています。
17日目
Kaggle notebook 写経
ひたすら写経しながらわからないところを勉強していたら1日が終わりました。
18日目
Kaggleで勝つ データ分析の技術
かかった時間:9時間
難易度:★★★☆☆
第3章:特微量の作成
kaggleに焦点をあてた本だけあった特微量についての情報がかなり充実しています。取り組んでいるコンペM5でも活用できそうな特微量作成の手法がたくさんありました。特に時系列データの扱いについてページを割いて書かれてあったのが非常に勉強になりました。
特に使えそうだなと感じたのは、特定の日に関する二値変量を取ること、イベントに関するラグ特微量、clipping、複数の変数の組み合わせあたりでしょうか。
第4章:モデルの作成
kaggleで人気のGBDTについての解説が多かったです。パラメータについては6章で。
第5章:モデルの評価
クロスバリデーションについて丁寧に説明されています。特に、時系列データにおけるクロスバリデーションが詳しく解説されていたのが非常に勉強になりました。実際の分析コンペでどのようにクロスバリデーションを行ったかも解説されていて、内容の充実度がすごいです。
第6章:モデルのチューニング
GBDTのパラメータが勉強になりました。今回はここまで手が回るかな。。特微量選択についても触れています。
第7章:アンサンブル
スタッキングやアンサンブルする際のポイント、注意点など。実際のコンペの例もあってわかりやすいです。
Kaggleで勝つ データ分析の技術について
まさにkaggleの教科書です。ここに書いてあることを自分で選択して、データに適応できるようなれば間違いなく上位を狙えるくらい「武器」が揃っている本でした。
kaggleをやるなら必ず横に置いておきたい、そんな本です。
19日目
Udemy python for time series data analysis
かかった時間:5時間
難易度:★★☆☆☆
Section1:introduction
Section2:course setup
section3:numpy
section4:pandas
section5:data visualization with pandas
numpyとpandasの復習です。
まだ若干曖昧な部分があったので、復習できる良い機会でした。
セクションごとにちゃんと演習問題もあってそこで理解できているか確認できます。
20日目
Udemy python for time series data analysis
section6: time series with pandas
section7: time series analysis with statsmodel
section8:general forecasting model 途中まで
すぐ終わるだろうと思いきやなかなか進みません。。
モチベも上がらないのでUdemyのこの講座は今日で一旦やめます。
21日目
coursera DeepLearning: コース1 Neural Networks and Deep Learning 3週目まで
かかった時間:8.5h
難易度:★★☆☆☆
3週目までの内容はほとんど、courseraのMachineLearningとゼロから作るDeepLearningですでに習ったことだったので、動画を倍速にしながら進めていきました。
22日目
コース1:Neural Networks and Deep Learning week4終了
かかった時間:3時間
難易度:★★☆☆☆
内容はforward propagationとbackpropagationについての総まとめといった感じです。この辺は何回か学習しているので動画はさらっと聞いていました。
プログラミング課題も誘導がかなりしっかりしていて、ヒントが散りばめられているので迷うことなく進めることができました。
コース2:Improving Deep Neural Networks week1終了
かかった時間:4時間
難易度:★★☆☆☆
train,val,testdataについて、biasとvariance、regularization、gradient checkingなどはMLの内容と多少かぶっています。
dropoutの実装方法やweight initializationはとても勉強になりました。
コース2:Improving Deep Neural Networks week2終了
かかった時間:3時間
難易度:★★☆☆☆
ミニバッチ勾配降下法とmomentum,RMSprop,Adamについて学びました。
これはゼロから作るディープラーニングで一度触れていたものの、かなり曖昧な理解だったのでもう一度しっかり学ぶことができてよかったです。
本よりこちらの動画の説明の方が個人的にはわかりやすかったです。
コース2:Improving Deep Neural Networks week3 課題手前まで
かかった時間:2時間
難易度:★★★☆☆
内容はハイパーパラメータの調整法、BatchNormalization、softmax、tensorflow導入です。ハイパーパラメータの調整は今までgridでやるものだと思っていたので、ランダムに取るというのは少し意外でした。BatchNormalizationは初めて学んだ概念で、さらにパラメータを増やすことに驚きましたが、その必要性についてはなんとなく理解できました。この辺りになると、もはや日本語字幕がないので動画を適宜止めつつ英語字幕と格闘していました。softmaxはディープラーニング本で学んだこと以上のことは特にありませんでした。tenforflowは初めて扱うので、動画の説明だけだともはやよくわかりませんでした。。
23日目
コース2:Improving Deep Neural Networks week3課題終了
かかった時間:1.5時間
難易度:★★☆☆☆
実際にtensorflowを用いてNNを実装します。
課題の誘導にかなり負んぶに抱っこ状態でしたが、大きな流れを理解することができました。back propagationが1行で実装できるので、今までのnumpyを使った実装はなんだったのだろうと思うくらい、めちゃくちゃ便利です。
コース3:Structuring Machine Learning Projects week1,2終了
かかった時間:6.5時間
難易度:★★☆☆☆
実装する上での注意点を構造化して解説するコースです。
今まで習ったtrain/dev/testsetに加えて、human-levelを同時に考慮に入れつつ、biasなのかvarianceなのか、data-mismatchなのかを判断していきます。error analysisを用いてどのようにしてモデルを改善していくかも解説されています。
このコースではプログラミング課題もなく、2週で終わるためスピードを出して進めることができました。
コース4: Convolutional Neural Networks week1終了
かかった時間:5.5時間
難易度:★★★★☆
やっとディープラーニングの本題に入ってきたという感じです。
畳み込みニューラルネットワークについて基本から解説されています。最後にはnumpyを用いたCNNの実装と、tensor flowを用いた実装の2つがあり、結構時間がかかりました。魚本(ゼロから作るディープラーニング)で一応一通り、理解していたから何とかなりましたが、事前知識ゼロでこれを実装するのは理解にしっかり時間をかけないと、なかなか大変だと感じました。
コース4: Convolutional Neural Networks week2 途中まで
かかった時間:2時間
難易度:★★☆☆☆
過去に発表された様々なディープラーニングのモデルが解説されています。
魚本でも載ってはいたもののさらっとだけ解説されていたモデルも、しっかりと踏み込んで解説されており、なかなか面白かったです。
それぞれのモデルが発表された論文を引用しており、授業を聞けば出てきた論文は大体自力で読むことができるようになるとのことです。
24日目
コース4:Convolutional Neural Networks week2 途中から
かかった時間:3時間
難易度:★★★☆☆
プログラミング課題ではKerasの導入ののちに、ResNetを実装しました。
Kerasの導入によってNNのモデル作成がさらに簡単にできるようになります。
魚本ではResNetなんてのもあるから知っておいてね、というレベルの紹介だったので、それを実装までできるようになるとはなかなか感動しました。(最大限のお膳立てがあってのことですが)
コース4:Convolutional Neural Networks week3 終了
かかった時間:5.5時間
難易度:★★★★☆
内容は物体検出についてです。物体認識とは異なり、画像のなかに「何の」物体が「どこに」あるのかをboxとしてアウトプットします。
sliding windowについてはcourseraのMLで最後の方にちょろっと紹介されていましたが、今回はさらに踏み込んでどのように実装するか、特にYOLOについての解説でした。やっていることは非常に難しいのですが、さすがNg先生、説明がとてもわかりやすいのでしっかり理解できました。
プログラミング課題は、自動運転で使われるような車、歩行者、信号機等の検出で、この課題はかなり時間がかかりましたが、これまでの課題で一番面白かったです。
25日目
コース4:Convolutional Neural Networks week4 終了
かかった時間:6.5時間
難易度:★★★☆☆
顔認識と画風変換の2つのテーマを扱いました。
今まで習った知識を使って、かなり実用的なディープラーニングについて学べたのでとても面白かったです。特に画風変換は自分の好きな画像を使って遊べるので楽しいです。
今まで全く原理のわからなかったものが、多少わかるようになっただけでも機械学習を勉強してきて良かったなあ思います。
コース5:Sequence models week1 途中まで
かかった時間:4.5時間
難易度:★★★★★
RNNについて初めて学習しました。DeepLearningの5つのコースの中でも特に難しいと感じました。このコース、最初の数回は日本語字幕があったのに、途中から無くなった時の絶望感が半端ないです。
何となくRNNの構造はわかったのですが、それが具体的にどのような効果をもたらしているのかというのがブラックボックスに感じられてしまい、なかなか理解が追いつきづらい印象でした。
26日目
コース5:Sequence models week1 終了
かかった時間:5時間
難易度:★★★★☆
プログラミング課題はGRUとLSTMのForward/Backward Propagationの実装、恐竜の名前生成、jazz音声生成でかなりボリュームのある課題でした。
LSTMのbackpropagationはかなり複雑で丁寧な誘導があってやっとできたって感じです、自分でイチから実装するのはかなり難しいです。
恐竜の名前生成は面白かったです。存在している恐竜の名前から、可能性の高い恐竜の名前をRNNを用いて生成していきます。この技術は遊びレベルで汎用性が高そうです。(何かのネーミングを決める時の参考にできそう)
jazzの音声生成も面白かったです。この課題の元ネタとなったサービスはdeepjazzというのですが、ハッカソンで32時間で書き上げられたものらしいというのが驚きです。音をどのように分解しているかまではわからなかったのですが、音楽までも生成できてしまうことに感動しました。
コース5:Sequence models week2 終了
かかった時間:4.5時間
難易度:★★★★☆
2週目はword embedding,word2vec, negative sampling, Glove word vectors, Sentiment Classification, バイアスの除去について学びました。
個人的には自然言語処理は画像処理よりも何が起こっているかの感覚が掴みづらく、難しく感じます。今回もなかなか理解に苦戦しました。
プログラミング課題はコサイン類似度を用いた単語の類推とLSTMを用いて文章を基にした絵文字の推定を行いました。少ないサンプル量でも精度の高い類推ができていたのが驚きでした。
27日目
コース5:Sequence models week3 終了
かかった時間:5時間
難易度:★★★★☆
最後のweek3です。Beam Search、error analysis、Bleu Score、Attentionモデル、音声認識、Trigger Wordについて学びました。プログラミング課題は、日付のフォーマット統一とtigger word detectionでした。データの前処理の実装にかける時間の方が長かった気がします。身近なスマートスピーカーの機能の実装だったのでなかなか面白かったです。
coursera deep learningについて
事前知識のおかげでコース1~3をかなりスピードを上げて取り組めたのが大きかったです。 5コースの中でもっとも重きが置かれているのはコース4のCNNとコース5のRNNで課題もヘビーで時間がかかりますが、その分面白い課題も多かったように思います。
コース4に関しては日本語字幕が整備されていたので、講義ではある程度のスピードは維持できました、本当にありがたいです。
それにしてもmachinelearningとdeeplearningのコース共通してAndrew先生はとてもわかりやすかった。機械学習を最初に学んだのがcourseraだったからここまで挫折せず続けられてこれたのかなあと思っています。
ヒーローインタビューもわからない部分も多かったですが、 AI業界のヒーローが機械学習を始めたきっかけ、機械学習を学ぶのにPhDに進むべきか企業に勤めるべきかなど興味深い話も多くて面白かったです。
こう講義を通じて、ディープラーニングは本当に面白い分野で、もっと深く勉強していきたいと強く感じました。今年秋頃に再度時間をかけて自然言語処理、画像認識などについて深掘りしていきたいです。
28~30日目
Kaggleで主に特微量の作成を頑張りました。
「Kaggleで勝つ データ分析の技術」で時系列データに関する特微量の作成が詳細に解説されているのでそれを元に自分で仮説を立てて、特微量を作成しました。
詳細は特に書くことでもないので割愛します。
今後について
今後はこれまでほど時間を作るのは難しくなっていくとは思いますが、kaggleを引き続きやっていきます。今年中にメダルを取ることが目標です。
kaggleには医学分野のコンペが多く、画像診断などがよく開催されています。
ディープラーニングをもっと勉強して画像コンペにも出場できるようになりたいです。
ここまでご覧いただきありがとうございました。今後も引き続きアウトプットの場としてQiitaに記事を書いていけたらと思います。