俵言

しがない社会人が書く、勉強とかのこと

初めての画像分類コンペでめっちゃ頑張って上位まで行ったが、閾値を攻め過ぎて大爆死した

9/11 - 10/26 (おおよそ1ヶ月半) にかけて、以下の 「熱帯低気圧(台風等)検出アルゴリズム作成」コンペ に参加しました。

signate.jp

得るものは本当に沢山(DNNの実装や学習の経験・ノウハウなど)あったのですが、結果として最終提出の順位は 5位(public) => 207位(private) に転落しました。

覚悟の上での行動ではありましたがやっぱり1月半の努力が全部無に帰ったのはとてもつらくて(しかも一人で全力で完走した初めての分析コンペだった)、少しでも自分がやったことを形として残そうと思ってめちゃくちゃ久しぶりにブログを書いています。

きちんと書こうとするといつまで経っても公開できない気がするので(過去何度も繰り返したケース)、大雑把な内容にはなりますがご容赦ください。

  • はじめに:参加動機
  • 実装したモデル: 改変版 WideResNet
  • データの分割(train, validation)に関して
  • 学習のさせ方
  • 前処理, Data Augmentation, TTA
  • アンサンブル
  • おわりに:得られたものとか今後とか
  • 参考にさせて頂いた文献、スライド、web ページなど
  • おまけ: 雑なコンペ取り組み日記
    • データだけダウンロードする (8/27)
    • 「」(8/28 - 9/10)
    • データを見たり、前処理などを書いて学習の準備を進める (9/11 - 9/15)
    • とりあえず ResNet50 で学習開始 (9/16)
    • 初めての提出(9/17)
    • schedule learning 等の検討 (9/18 - 22)
    • 手法の調査、検討 (9/11-9/22)
    • WideResNet の実装完了・導入(9/23 - 9/25)
    • 2週間の迷子 (9/26 - 10/9)
    • 実装ミスの発覚、一筋の光明が差す (10/10 - 10/14)
    • 5 位まで駆け上がる (10/15 - 10/20)
    • 悪あがきと 駆け引き (10/21 - 10/26)
    • 大爆死 (10/27)
続きを読む

ゼロから作るDeep Learning - 第5回:4章(その1)損失関数

はじめに

次の記事を書こう書こうと思いつつ、気付いたら2週間経ってました。何てこったい..書く気を取り戻したので再開します。

この「ゼロから作るDeep Learning」の勉強内容をひたすら書いていく記事も、遂に本題である学習の話に入っていきます。
3章まではニューラルネットワークの構造など導入的な意味合いが強かったと思うのですが、ここからはいかに自動で最適な重みを学習するのか、というニューラルネットワークの核となる部分です。僕の一番勉強したかったところなので気合入れて勉強して行こうと思います!

4章 ニューラルネットワークの学習

4章の導入では、SVMやKNNといった機械学習の手法は人が特徴量(データの注目すべき点)を作りこむ必要がある(すなわち人が介在しなければならない)けれど、ニューラルネットワークディープラーニング)は生データをそのまま学習させることができると書かれています。

個人的には「そうなの?」って思ったんですけど、よくよく考えるとこの本は画像認識を念頭に置いて書かれているので間違っていない気がします。「この画像に写ってるのは何か?」って話だと確かにそうなのかなって。(画像認識やったことないのでわかんないですが。)
ただ、言語処理をやるだとか、多種多様なデータを複合して何かやろうだとかなると、人の手がかなり介在する気がします。まあこれからの進展でなんでも出来るようになるかもしれませんけども。

4章も3章と同様に3つに分けて勉強していこうと思います。

今回は その1である損失関数のお話です。

続きを読む

gensim の tfidf で正規化(normalize)に苦しんだ話

最近先輩に勧められて python の gensim というライブラリを使い始めたのですが、試しに tfidf やってみたらどうやって正規化してるのかわからなかったから調べたって話です。

かなり細かいことなのですが、同じことに苦しむ人がもしかしたらいるかもってことで記事にすることにしました。

gensim とは?

radimrehurek.com

gensim は python で提供されている自然言語処理のライブラリで、tfidf や、LSI や LDA みたいなトピックモデル、はたまた word2vec なんかも手軽に計算できる便利なツールです。これ2008年からあるらしいんですけど知らなかった...これの存在知ってたら僕の卒論の実装もっと楽になった気がする(--;)

まあ過去の話はさておき、このライブラリを試してみるべくまずはtfidfの計算をしようとしたわけです。

続きを読む

ゼロから作るDeep Learning - 第4回:3章(その3)ニューラルネットワークを試してみる

はじめに

今回も引き続き3章です。今回は その3:試してみる編 です。

この前作ったニューラルネットワークを試すだけなのでさらっと終わると思います。

その3) 実装したニューラルネットワークを試してみる

今回は前回作ったNNを用いて手書き数字(0~9)の認識を試みます。用いるデータセットMNISTというモノクロ画像のデータセットで、とても有名なやつらしいです。一枚の画像は 28 × 28 のピクセルで表現されていて、各ピクセルは 0~255 の値をとります。これらの数字を認識させて、正解ラベルとどれくらい一致するか試してみます。

なお、データを取得する手段やNNのパラメータ(重みとバイアス)は著者の方が用意してくれているため、本当に何もする必要がありません。

続きを読む