はじめに
こんにちは。Yuki | Kagglerです! 先日、Shopeeコンペの順位が確定して銀メダルをいただき、晴れてCompetition Expertになることができました。区切りがいいのでここまで取り組んできたことをまとめてみました。
※ 6/28追記:Amazonのリンクが切れていたので貼り直しました!
プログラミング&機械学習を始めて一年、ようやく
— ユウキ | Kaggler (@Yuki_Kaggler) May 12, 2021
Kaggle Expertになることができました!!
行列も正規分布も知らず、ターミナルなんて触ったこともない状態からのスタートでしたが、ようやくここまで来ました。
ここまで来れたのは偏にこれまで関わってきた皆様のお陰です。これからも頑張ります!! pic.twitter.com/kMkaFhqhU9
この記事の対象者
- Kaggleをやってみたいが、何から始めればいいかわからない方
- 機械学習の勉強をしてみたいが、何から始めればいいかわからない方
- 機械学習の勉強をしているが、なかなか本屋に行けず、どの本を買えばいいかわからない方
- Kaggleを頑張っているが、中々上位にいけなかったり、最後まで走りきれずに悩んでいる方
上記にきれいに当てはまらなくても、何か参考になることがあるかもしれません!!
目次
##1. 自己紹介
TwitterでYuki | Kagglerという名で活動している、東京大学理科一類2年生です。学部・学科は工学部物理工学科に進学予定で、量子機械学習を研究したいと考えています。元々は機械学習を学びたくて、色々なデータに触れて機械学習に対する興味を絞るためにKaggleを始めました。(と言いつつ最近は専ら画像コンペに出てます。)
##2. 注意事項
この記事はあくまで僕がExpertになるまでにしたことを書いた記事であり、こうすればExpertになれる、といった類のものではありません。また、数学に関しては大学の授業に合わせて教科書で学んだため、機械学習を勉強するために学んだとは言い難いと判断して詳細は省きます。また、アフィリエイトは一切使っていません。
##3. 実際に書いていく
基本的には1ヶ月単位で学んだこと、その時感じたことを書いていきます。
勉強開始前(~2020年3月)
受験が終わったのでとりあえず線型代数を勉強し始めました。この時点では微積・統計の知識は高校生レベルで、線型代数は何も知りませんでした。ちなみに、僕の世代は行列は高校生では習わず、しかも統計も2Bの範囲は無しで受験できたのでせいぜい相関係数は知ってるよレベルです。正規分布なんて聞いたこともありませんでした。もちろんプログラミングはほとんどやったことがなく、ターミナルなんて触ったこともありません。本当に0からのスタートです。
4月
-
「スッキリわかる Python入門」
この本でPythonを勉強し始めました。これ以上はないぐらい親切な内容で、1冊目として選んでよかったと感じています。
Amazonのリンクはこちら -
Udemyの「実践Pythonデータサイエンス」講座
ここでnumpy, pandas, matplotlib, seabornなどを一通り学びましたが、はっきり言ってあまりわかってはいませんでした。udemyの講座に関してはもっといい講座に出会えたので後に書きます。最後の機械学習のパートを楽しみにしていたものの、そのパートが全くわからず途方に暮れて手を出したのが次の本です。
リンクはこちら -
「Pythonではじめる機械学習」
あっという間に挫折しました。教師あり学習、教師なし学習、特徴量エンジニアリング、モデルの評価、テキストデータの処理などが網羅的に解説されている一冊です。機械学習そのものに関する内容ももちろん豊富ですが、scikit-learnの使い方の解説という趣も割と強かったと感じています。前述の講座であまりnumpyやmatplotlibがわからなかった上に、機械学習そのものも何も知らないという状況だったので、言ってることもコードもわからない箇所が多くて辛かったです。また、日本語が若干不自然なところが割と多く、不自然な日本語を頭の中で補正ができなかったことも、今振り返れば致命的なポイントでした。
Amazonのリンクはこちら
5月
-
courseraの「Machine Learning」
-
「ゼロから作る Deep Learning」(以下ゼロつくと略記)
courseraで学ぶ中で深層学習が面白そうと感じて読みました。パーセプトロンから始まり、多層パーセプトロン、誤差逆伝播法、SGDやAdamといった最適化手法、CNNと豊富な内容で構成されています。この本は著者が日本人であることもあり、解説が非常にわかりやすくて日本語にも詰まることなく読めました。コードに関する説明も非常に詳しいので、Pythonに不安がある人でも十分読み切れると感じています。この本で深層学習(特にCNN)に感動して、この分野に人生をかけていいのではないかと思えたからこそ今があるので、僕の中で最高の一冊です。迷っている方はぜひ手に取ることを勧めます。
Amazonのリンクはこちら -
「Pythonで始める機械学習」
前回挫折したリベンジをしました。読み切れた理由としては、機械学習に強くなったお陰で違和感のある日本語に悩まされなくなった、ゼロつくを読むうちにコーディング力が上がっていた、などが挙げられます。
中途半端にしか読んでいないので大きくは取り上げませんが、似た本に「Python 機械学習プログラミング」という本があります。この本の方が若干難易度は上がって数学力も求められますが、courseraの説明との親和性が高くてより詳しいので、こちらにチャレンジしてもいいかもしれないです。前半はDeepじゃない機械学習について、後半は深層学習がTensor Flowを用いて解説されています。僕は前半を読みながらコーディングしましたが、非常に勉強になりました。
Amazonのリンクはこちら
6月
-
「ゼロから作る Deep Learning 2」
ゼロから作るDeep Learningの続編で、自然言語処理編です。前作の復習から始まり、word2vec、シンプルなRNN、LSTM、LSTMを用いたSeq2Seq、Attentionなどがフルスクラッチで作り上げられています。こちらの方が量が多くて難易度も上がっており、前作ほどスラスラとはいきませんでした。しかし説明は非常にわかりやすく力がつくので、ゼロつく1を読み終えた方、深層学習での自然言語処理に興味がある方は是非手に取ってみてください。(全然関係ありませんが、帯の言葉が大好きです。痺れますね〜)
Amazonのリンクはこちら -
「ゼロから作る Deep Learning 3」
これも前作からの続編で、フレームワークを作っていくというものです。最後には、ゼロから作ったフレームワークでCNNやLSTMを実装して動かすというワクワクするシナリオになっています。1, 2と比べると人気は劣るような印象ですが、個人的には1, 2と同じぐらい大好きです。この本のお陰で何の違和感もなく、むしろ感動してPyTorchを使い始めることができたという点で、今振り返るとこの本も非常に重要でした。さらに分厚いですが、前作や前々作の復習もすることができ、さらにPythonそのもの(特にクラスについて)に対して強くなれました。
Amazonのリンクはこちら -
G検定の教科書、問題集
G検定というものがあるということを知り、どうせなら受けてみようということで勉強しました。今振り返って必要だったかと言われると必要はなかったと思います。自分が勉強していなかった各分野を浅く知れました。
教科書のAmazonのリンクはこちら
問題集のAmazonのリンクはこちら
7月
-
G検定合格
ここまでゼロつくなど様々な本を読んでいたので機械学習に関しては余裕でしたが、法律に関してははっきり言って無理ゲーという他なかったので、教科書にある分だけ抑えて、本番でわからないところは40回以上ググってやっつけました。体感は8割5部ぐらいでした。積極的に受ける必要はないかと思いますが、勉強したついでに受けてみるのもそれはそれでいいと思います。G検定とゼロつくなら間違いなくゼロつくです。少なくともKaggleに繋がるのは後者です。個人の所感なのであくまでご参考までに。 -
「直感Deep Learning」(Keras)
途中で挫折してしまいました。僕はフレームワークを学ぶ前にゼロつく3を読んでいたためにフレームワークはこういうものだというイメージが頭の中に既にあったので、それにそぐわないKerasを受け入れることがどうしてもできませんでした。全然直感的じゃなかったです...(人によるとは思いますが。)
Amazonのリンクはこちら
あと、本筋からはそれるのですが、GitやDockerもこのタイミングで一度勉強しました。ゼロつく2、3あたりは1人でGitを使う練習も兼ねていました。
8月
-
「実践Data Scienceシリーズ PythonではじめるKaggleスタートブック」
6月あたりに買ったものの、submitの仕方がわからないという理由で放置していたので引っ張り出してきました。Kaggleは全て英語で書かれているため心理的障壁が高くなりがちですが、この本を読めば取り組み方、コンペの種類など様々なことを知れるのでとてもよかったです。機械学習についての説明も優しく書かれていたので、この本から機械学習を始めるのもありなのかなと思いました。
Amazonのリンクはこちら -
Kaggle Titanicコンペ ・ House Prise コンペ
Kaggleスタートブックを読んで、自分なりにEDAをしたりアンサンブルをしたりしてみました。ほとんどスコアは伸びなかったですが、これまでと違ってちゃんとデータにさわれてる感覚があってとても嬉しかったです。個人的には、Kaggleに取り組み始める前にしっかり勉強する、というよりはできると思ったら即参加してみる方がいいと思います。目標はそれぞれ違うとは思いますが、Kaggleで強くなりたいのであれば、Kaggleを肌で感じで目標を立てて進めた方が圧倒的に早いです(自戒です)。 -
「米国データサイエンティストがやさしく教えるデータサイエンスのためのPython講座」
udemyの講座に関してはもっといい講座に出会えたので後に書きます。
それがこの講座です。今まで何となく使っていたnumpyやpandas、matplotlibなどにしっかり向き合うことができたので非常によかったです。この講座は発売同時に買ったので4月時点では無かったですが、あの時にこの講座に出会えていたらもっとスラスラ他の本を進められていたんだろうなと考えてしまいます。この講座の作者の「かめさん」という方はこの講座の他にもDockerやGitの講座も出しており、全部わかりやすいです。また、最近、numpyなどのライブラリではなく純粋なPythonの講座を出したようなので、今から買うのであれば目的に応じて選ぶといいと思います。udemyのクーポンが取得できる、かめさんのブログ記事を貼っておきます。こちらからどうぞ。Pythonを学ぶならこの方の講座が一番だと思っています。
講座のリンクはこちら
-
「PyTorch for Deep Learning with Python Bootcamp」
udemyのPytorchの講座です。書き始めてすぐに、これが今まで求めてたものだと感動した覚えがあります。全て英語なので若干敷居が高いですが、発音がとても綺麗で聞き取りやすいですし、Pytorchがしっかり解説されている動画講座は意外と少ないのでとてもオススメです。
Udemyのリンクはこちら -
OSICコンペ参加、挫折
-
E資格の勉強
G検定を受けたのだからE資格も受けてみようと思い、AVILENさんの講座を受講しました。G検定と比べればだいぶ理論が詳しく説明されていて、何となく誤魔化してきた部分をしっかり学習することができたと感じています。僕は大学1年の途中だったので、内容としては特異値分解あたりの話、そして情報理論は改めて勉強する必要がありました。また、強化学習に関してはここまで全く勉強してこなかったのでとても苦しみました。正直今でもあんまりわかってないです。そのほかの内容に関してはほぼこれまでの教材で網羅され尽くされていると感じています。色々な手法を知ることができたので、Kaggleで、この単語知らないなぁ...となることがだいぶ減って楽になりました。受験は2月なので、それまで何度も復習していくことになります。 -
「これならわかる深層学習入門」
E資格のために、深層学習の理論面の勉強で用いた本です。E資格を受験する際にはよく「深層学習」というめちゃくちゃ厚い本を勧められますが、僕はあれは明らかにオーバーワークだと思ったのでやめて、そこで代わりに手に取りました。深層学習だけでなく、機械学習全般についてわかりやすく書かれており、coursera、はじパタで手に入れた理解をアップデートすることができました。個人的にはこの本は強化学習の章がとてもわかりやすく、E資格の勉強に際して何度も何度も読んで式変形を追いました。深層学習の理論を学ぶならイチオシの本です。
Amazonのリンクはこちら
9月
-
統計、機械学習に関する諸々の本
OSICで撃沈してから、若干現実逃避気味になり色々な本(完全独習ベイズ統計入門、統計学入門、データ解析のための統計モデリング入門、多変量解析、これなら分かる最適化数学、はじパタ、 ...etc)を読みました。統計にもともと興味があったのでそれはそれでよかったのですが、Kaggleで強くなりためにはだいぶ遠回りをしたと思ってます。 -
「つくりながら学ぶ! Pytorchによる発展Deep Learning」
物体検出やセグメンテーション、Transformerなどこれまで紹介した書籍には中々掲載されていない発展的な内容が詳しく解説されています。各章で独立しているため、必要に応じて章ごとに読むことができるのでとてもオススメです。ソースコードも豊富なので、基本的な書き方を一通り理解した後に実践的な書き方を学ぶのにちょうどよかったと感じています。多くの人がこの本でPytorchを学んでいる印象です。
Amazonのリンクはこちら
ちなみに、現在はPytorchの入門書として有名であった洋書が翻訳されたPytorch実践入門が出版されており、Pytorchを深く学ぶならばこの本がいいのかもしれないです。(僕はもうKaggleに何度も参戦してそこで学んだので特に必要性をあまり感じておらず、買ったものの積読状態です。)
Amazonのリンクはこちら -
MoAコンぺ参加
10月
-
「Kaggleで勝つデータ分析の技術」(通称:Kaggle本)
MoAコンペに参加していた時に読みました。コンペに対する取り組み方、様々な手法、バリデーションの仕方、などKaggleで重要な部分をたくさん学ぶことができました。現在はテーブルデータのコンペが減ったためにこの本に書いていることがそのまま全部通用することは少なくなりましたが、それでも上述のようなコンペにおける重要な部分を学ぶことは非常に意義深いことだと思うので、持っていて損はしないと思います。色々なことが網羅的に書かれているため、辞書的な使い方をしています。長く使える一冊なので、Kaggleに取り組むならばおすすめです。
Amazonのリンクはこちら
改めて書くことはしませんがMoAコンペを頑張り続けていました。
11月
-
MoAコンペ終了
Top13%で敗北しました。その時の振り返り記事があるのでもしよければご覧になってください。初めてコンペをやり切った感想、反省を詳しく書いています。こちらから飛べます。 -
Gitの勉強
詳しくは振り返り記事を参照していただきたいですが、MoAコンペの終盤でNotebook管理が崩壊して失速してしまったため、それを反省して管理体制を見直そうと考え、改めてGitを勉強しました。その時に使ったのは「Git: もう怖くないGit! チーム開発で必要なGitを完全マスター」というudemyの講座です。この直後に、Kaggle Notebookで、特定のVersionにボタンひとつで戻れる機能がついたので結局Gitは使わなかったです。
Udemyのリンクはこちら
12月~2月
いきなりまとめてすみません。Cassavaコンペにほぼ全振りしたので書くことが少ないです。
- Cassavaコンペ
-
E資格合格
2月下旬の試験で無事合格することができました。かなり高額ですが、受けてよかったと感じています。Cassavaコンペにも大きく生きました。ただ、満点を取れなかったことが悔やまれます。
E資格合格してました。なんで数学が満点じゃないんでしょうね...
— ユウキ | Kaggler (@Yuki_Kaggler) March 11, 2021
全体でも満点を取りたかったですが、力及びませんでした。
これからも謙虚に頑張ります!#E資格 pic.twitter.com/eIPNDDKB8o
3月
-
RANZCRコンペ
Kaggle日記は[こちら](https://github.com/Yuki-Tanaka-33937424/kaggle-RANZCR)です。もしよろしければご覧ください。
楽しさを伝えたいので、一番楽しかったときのslackでのやりとりを貼っておきます。
4月・5月
-
Shopeeコンペに参加
こちらもチームで、今回は4人で参加しました。shopeeという東南アジアのメルカリのようなサイトの商品の画像と文章を元にマッチングをするタスクでした。Top3%銀メダルを獲得することができ、Expertに昇格することができました。チームメイトの方々には本当に感謝です。
自然言語処理についてはBERTを動かすので精一杯だったので今後の課題です。Kaggle日記はこちらで、KaggleのDiscussionに掲載している解法はこちらです。もしよろしければご覧ください。
##4. まとめ
僕が偉そうに言えることは何もありませんが、とにかく伝えたいのはKaggleで強くなりたいならKaggleをするのが最も近道であるということです。本で勉強した後にKaggleのコンペに実際に参加するとギャップに苦しむことになる可能性が高いですが、Kaggleには公開NotebookやDiscussionなどヒントがたくさん落ちているので、腰を据えて(英語が苦手であればDeeplを使って)向き合っていくことが大切だと思います。
そして、今回僕があえてExpertになった段階で勉強したことを全て公開したのは、Master以上の方々が書いた素晴らしい記事が既にたくさんあるからです。特に初心者の場合はMaster以上の方々との距離がだいぶ大きいので、距離が近い僕の記事にも価値があると判断しましたが、Master以上の方々の記事も是非ご覧になってください。僕自身も何度も見て参考にさせていただきました。
##5. 今後の目標
言わずもがな、Kaggle Masterです。今年中に確実に昇格します。また、ここまでのメダルは全てチームでとっているため、どこかのタイミングでソロでメダルを取ります。
ここまでご覧いただきありがとうございました!少しでもお役に立てたのであれば嬉しい限りです。Happy Kaggling!!