AI_ML_DL’s diary

人工知能、機械学習、ディープラーニングの日記

Kggle散歩(November 2020)

Kggle散歩(November 2020)

 

11月は、25日にLyftが、30日にMoAが終了する。

Lyftは、計算資源の確保が課題であり、MoAは、Public LBとCVを天秤にかけながら、性能を上げる方法を探ることが課題である。

 

11月1日(日)

Generative Deep Learning by David Foster : CHAPTER 1 : Generative Modeling

discriminativeとgenerative:discriminativeは、training datasetに含まれる特徴を把握して、test dataが何であるかを予測する。generativeは、training datasetに含まれない、新たなデータを作(創)り出す。

generative modelの定義:

A generative model describes how a dataset is generated, in terms of a probabilistic model. By sampling from this model, we able to able to generate new data.

ここに馬の画像データがある。新たに用意した画像が馬かどうかを判別することが、discriminative(識別)であり、馬の画像データに含まれていない馬の画像をつくるのが、generativeである。馬の画像をつくるためには、作られた画像が「馬」でなければならないので、馬であることを、馬の画像から学ぶのである。

元の画像に含まれず、かつ、元の画像に含まれていたがごとく、「リアル」であることが、generative modelの性能を測るものさしになる。

The Rise of Generative Modeling:

2018年に、NVIDIAからStyleGAN(非常にリアルな顔画像を生成)が発表され、

2019年に、OpenAIからGPT-2(導入文から完全なテキストを生成)が発表された。

6ページから7ページにかけて、著者のgenerative modelingに対する考え方が、簡潔に表現されていて、その内容が非常に興味深い。

As well as the practical uses of generative modeling (many of which are yet to be discovered) , there are three deeper reasons why generative modeling can be considered the key to unlocking a far more sophisticated form of artificial intelligence, that goes beyond what discriminative modeling alone can achieve.

このあと、約40行にわたってそのthree deeper reasonsが説明されている。

うまく要約できないし、全文掲載するのもはばかられるので、3つのパラグラフのはじめの方の文章を転記しておく。

First, purely from a theoretical point of view, we should not be content with only being able to excel at categorizing data but should also seek a more complete understanding of of how the data was generated in the first place.

Second, it is highly likely that generative modeling will be central to driving future developments in other fields of machine learning, such as reinforcement learning (the study of teaching agents to optimize a goal in an envilonment through trial and error).

Finally, if we are to truly say that we have built a machine that has acquired a form of intelligence that is comparable to a human's, generative modeling must surely be part of the solution. One of the finest example of a generative model in the natural world is the person reading this book. Take a moment to consider what an incredible generative model you are.

 

11月2日(月)

MoA:

先週、GPUを使わないで、CPUだけでパラメータ調整を行った。CPUだけだと、少ししか走らせることができないので、最も早く結果が分かる、最初のFoldのVal_lossを使うことにした。

モデルの性能を上げるために、チューニングを行った結果、最初のFoldのval_lossの値を、公開コードの初期条件で計算した場合よりも小さくすることができた。

良い結果が得られるだろうと思って、GPUが使えるようになった土曜日に、全体の計算をして、commit, submitしたところ、CVもpublic LBも公開コードより悪くなった。

期待外れの結果になったのは、最初のFOLDにoverfittしたのが、その原因だろうな。

Public_dataにoverfittして、private_dataのスコアが悪くなるのと同じようなことだな。

DNNではないので、計算時間が短く、チューニングの作業は比較的簡単に行えるのだが、見えないprivate_dataに適合するモデルに仕上げるチューニングは、難しい。

 

11月3日(火)

MoA: 

今日は、モデルの不具合に気づいたおかげで、CVが少し改善した。(epochsを50にしてearly stop=Trueにすると、なぜか収束が悪くなる。どうしてそうなるのかわからないので、とりあえず、early stoppingを使わないようにした。)

SEEDを変えたモデルのアンサンブルの効果を調べてみた。その効果は意外に大きかったので、それならばと、本命のモデルに適用してみたところ、効果は実験に使ったモデルの場合の1/3程度しかなく、少しがっかりした。原因は、おそらく、実験に使ったモデルの方が、FOLD間でのval_lossのばらつきが大きかったので、SEED間でのばらつきも実験に使ったモデルの方が大きかったため、アンサンブルの効果も大きかったのではないかと考えている。

3000人以上が参加していて、同一スコアにたくさん並んでいる。

上位のスコアの公開コードを見ると、public LBはCVとは連動しているようには見えず、public_dataにoverfittingしているのではないかと思う。CVもpublic LBも良好なコードも公開されているので、それらに勝るモデルにするには、CVだけでなく、public LBもある程度の値になっていないとダメだろうけど、それがどのあたりなのかは、わからない。

 

11月4日(水)

MoA:

NNの特徴は、深さだと思うのだが、どうなんだろう。

非線形活性化関数を通過する毎に非線形性が増して、より複雑な関係性を繋ぐことができるのではないだろうか。

浅いNNは従来の機械学習に劣り、深くすることによって、従来の機械学習を凌ぐことができるのではないだろうか。

DNNの世界から表データが取り残されているように思っていたら、TabNetというのが考案されたようだ。

TabNet: Attentive Interpretable Tabular Learning
Sercan O. Arık and Tomas Pfister, arXiv:1908.07442v4 [cs.LG] 14 Feb 2020

ABSTRACT
We propose a novel high-performance and interpretable canonical deep tabular data learning architecture, TabNet.

TabNet uses sequential attention to choose which features to reason from at each
decision step, enabling interpretability and more effcient learning as the learning capacity is used for the most salient features.

We demonstrate that TabNet outperforms other neural network and decision tree variants on a wide range of non-performance-saturated tabular datasets and yields interpretable feature attributions plus insights into the global model behavior.

Finally, for the first time to our knowledge, we demonstrate self-supervised learning for tabular data, significantly improving performance with unsupervised representation learning when unlabeled data is abundant.

 

11月5日(木)

Study:

量子多体問題を解く鍵である多体量子状態を完全に(近似ではなく)表現する波動関数ニューラルネットワークで表現する方法が注目されている。それを初めて具体化したのが次の研究のようである。

Solving the Quantum Many-Body Problem with Artificial Neural Networks

G. Carleo and Matthias Troyer, arXiv: 1606.02318v1 [cond-mat.dis-nn] 7 Jun 2016

この研究に至る前夜の状況が次の総説にまとめられているようである。

THE NONEQUILIBRIUM QUANTUM MANY-BODY PROBLEM AS A PARADIGM FOR EXTREME DATA SCIENCE
J. K. Freericks, B. K. Nikoli´c and O. Frieder,  arXiv:1410.6121v1 [cond-mat.str-el] 22 Oct 2014

Generating big data pervades much of physics.

But some problems, which we call extreme data problems, are too large to be treated within big data science.

The nonequilibrium quantum many-body problem on a lattice is just such a problem, where the Hilbert space grows exponentially with system size and rapidly becomes too large to fit on any computer (and can be effectively thought of as an infinite-sized data set).

Nevertheless, much progress has been made with computational methods on this problem, which serve as a paradigm for how one can approach and attack extreme data problems.

In addition, viewing these physics problems from a computer-science perspective leads to new approaches that can be tried to solve them more accurately and for longer times.

We review a number of these different ideas here.

Keywords: Nonequilibrium quantum many-body problem; extreme data science.

 

MoA:

CVかpublic LBか、ということだけでなく、val_log_lossの単純平均も重要だと思う。

CVとlog_lossは比例していない。 

log_lossのFoldごとのばらつきが大きいと、CVが小さくなる傾向にあるが、どういう計算をしているのか、よくわからない。

優先順位は、val_log_loss > CV > public LBというところかな。

 

11月6日(金)

Study:

以前に掲載したかもしれないが、今日は、波動関数をNNで表現するところにフォーカスしたいと思う。

Ab initio solution of the many-electron Schrödinger equation with deep neural networks
David Pfau, James S. Spencer, Alexander G. D. G. Matthews, and W. M. C. Foulkes

PHYSICAL REVIEW RESEARCH 2, 033429 (2020)

f:id:AI_ML_DL:20201107001409p:plain

Deep neural network solution of the electronic Schrödinger equation
Jan Hermann, Zeno Schätzle, and Frank Noé, 

arXiv:1909.08423v5 [physics.comp-ph] 23 Sep 2020

f:id:AI_ML_DL:20201107001743p:plain

明日は、FermiNetとPauliNetを理解したうえで、簡潔な日本語で説明できるようにしようと思っている。

 

MoA:

CPUを使って、NNのチューニングを行っていた。

2層、3層、4層、および5層のNNについて、log_lossが最小になる条件を探している。

 

11月7日(土)

MoA:

GPUを使うとサクサク進むが、細部にこだわりすぎることがあるので、要注意。

log_lossを小さくしていくのは、簡単ではないが、log_lossが小さくなっても、submitしてみたときにpublic LBが大きい値になると、これでいいのだろうかと、悩んでしまう。

 

FermiNetとPauliNet:

原理を正しく説明しようとしているのだが、正しく理解するのが難しくて、原稿の締め切りに間に合わない!

 

11月8日(日)

MoA:

今日は、最も基本的なhidden_layerが2層のNNモデルに集中してチューニングした。

val_log_lossは、これまでになく小さくなったが、public LBスコアは、改善せず、むしろ悪化した。何に注力すべきか迷う。

learning_rate, batch_size, hidden_size, dropout_probabilityなどの変更は常にやっているが、今回は、これまで以上に、変化率を小さくして検討している。そうすると、パラメータ間の相関がこれまでよりもよく見えるようになったと思う。それもそのはず、見ている数値の桁数が違うのだ。4桁目、5桁目、6桁までじっくり見ていると、見えなかったものが見えてくるのだ。活性化関数による違いもよく見える。

 

11月9日(月)

今日は、FermiNetとPauliNetの説明文を作成しよう。

第一原理量子化学計算、変分量子モンテカルロ波動関数仮説

量子多体問題を厳密に解く

数原子、数十電子(2-30電子)を超えると計算機の能力を超える

近似計算しかできない

多体電子系波動関数ニューラルネットワークで表現する(ニューラルネットワーク量子状態:neural-network quantum states:NQS)

多体スピン構造の波動関数を、制限ボルツマンマシンによって表現する

ニューラルネットワークのパラメータ(多体電子波動関数)の最適化は、変分モンテカルロ法もしくは時間依存変分モンテカルロ法を用いて行う

PauliNet:ハートリーフォックベースラインや標準ジャストロー因子やバックフロー変換などの物理モデルから構成されているネットワーク

FermiNet:PauliNetの考案者らは、FelmiNetについて、物理学を組み込むことなく印象的な精度に到達している、と評価している:比較的単純な数学関数とディープニューラルネットワーク構造によって多電子系波動関数を表現

PauliNetは物理屋さん主導で、FermiNetは機械学習屋さん主導、の印象

 

11月10日(火)

DNNを用いた量子化学計算手法について、半ページほどにまとめた原稿を完成させて学会の編集部に送った。できれば、もう少し長い原稿を書きたいと思うが、それが読者に役に立つ内容にするためには、GitHubの公開コードを実際に使ってみて、実際に使うにはどうすれば良いのかを紹介できることが必要だな。

Kaggleの計算環境を使うのは筋違いだろうな。

パソコン環境だと、自分のGPUがもう古臭いからだめだろうな。

そうなると、google colabを使うことになるのか。 

 量子化学のブログを書いてみよう。

 

MoA:

dropoutとCVとpublic LBの相関を調べてみる。

自前の条件で計算した結果だけを比較してみると、dropoutは0.4以上よりも0.3以下の方がCVもpublic LBも小さくなる傾向がみられた。

public LBのスコアは、公開コードの条件では0.01839だが、自前の条件では0.0186+の後半の方だったのが、今日、やっと0.185+の前半の領域に入った。

CVが小さいところでpublic LBも小さくなってきたのは、良い傾向だと思っている。

今日は、CVを下げるために、hidden layerのユニット数の増減の幅をかなり小さくして、計算を繰り返した。パラメータの調整幅をこれまでにやったことがないくらいまで小さくしているので、まだまだ時間がかかりそうだ。

 

11月11日(水)

MoA:現在、3680チーム

今日もファインチューニングだ!

モデルの基本構造を変えずにCVを下げると、public LBのスコアの最後の桁が1だけ下がった。これを繰り返せばいいのだが、どんどん難しくなる。

 

11月12日(木)

MoA:現在、3730チーム 

今日もファインチューニングだ!

training中にあらわれるnanが気になりはじめた。

train_lossとval_lossがnanになる。discussionで問題提起して解釈や対策が書かれていて、その対策が役に立ったとの返信があるのだが、さっぱり理解できない。

コメントに気になる箇所があったので、weight_decayをデフォルトに戻したら、とんでもないことになった。

 

11月13日(金)

MoA:3762チーム

train_lossとval_lossがnanになる原因がわかった。

weight_decayの値を変えてみると、nanが生じやすくなったり、全く現れなくなることが、現象として把握できた。

weight_decayは、L2正則化のパラメータで、overfittingの抑制に効果があるということを、確認することもできた。

 

11月14日(土)

MoA:3798チーム

全結合層は2層、dropout=0.2、weight_decay=1e-6、こんな感じで、ようやく、0.184+になった。

気をよくして気合を入れて、CVを小さくすることができたので、期待してsubmitしたら、0.01858が現れてがっかりした。public_dataに適合しなくても、private_dataで良いスコアが出ればいいのだと思っていてもやはり気になるものだ。

何度も同じ言葉を並べてしまうが、頭を整理しながら進まないといけないな。

今日は、活性化関数や最適化関数をいくつか試してみて面白い結果も得られたので良しとしよう。

relu, leaky_relu, elu, seluなどを試してみたが、少しづつ違う結果になる。

reluでnanが発生しても、leaky_reluにすれば少し抑制され、さらに、eluにすればnanが現れなくなった。といっても、良いことばかりではない。reluでnanが頻繁に出現する条件では、eluで抑制できても、スコアは悪化するだけだった。

Adamの他に、AdamW, Adamax, SGD,などを試したが、Adamより良い条件は見つけられなかった。それぞれの特徴を生かすには、細かい調整も必要なので、良く調べてからでないと、どれが本当に合うのかは、わからない。

今日から1週間のGPUの割当は、37時間だが、今日だけで7時間使った。

 

11月15日(日)

MoA:

今日も、ちまちまと、チューニングしていた。

public LBのスコアは同じだったが、順位が少し変動した。 

 

11月16日(月)

MoA:

今日はじめて気がついた。

optim.lr_scheduler.OneCycleLR

これはすごい機能だと思う。

これに関わるパラメータの値によって、nanが現れたり消失したりする。

 

11月17日(火)

MoA:3,911 teams, 14 days to go

今日も、public LBを上げることに注力していた。

nanが発生しにくくなって計算できる領域は広がったが、public LBのスコアをよくする方向は、なかなか見えてこない。CVを下げるにはdropoutを大きくするのが効果的だが、public LBのスコアは良くならない。

それでもようやく0.01838に到達した。

 

11月18日(水)

MoA:3,958 teams, 13 days to go

今日もチューニング、チューニング、チューニング。

改善の見込みがありそうな条件だと思ったが、

CVもpublic LBも改善できなかった。

 

11月19日(木)

MoA:4,004 teams, 12 days to go

低スコアの公開コードが投稿されている。

なかなかやるもんだな。

今日もチューニング、チューニング、チューニング。

 

こんなことばっかりしとったら、あかん。

プログラミング技術が上がらん。

 

11月20日(金)

MoA:11 days to go

TabNetを勉強する予定だったが、進捗なし。

dropoutの比率に対するCVとpublic LBスコアの依存性を調べている。

 

11月21日(土)

MoA:4,072 teams, 10 days to go 

dropoutとの相関調査継続中。

 

TabNet:

TabNet: Attentive Interpretable Tabular Learning
Sercan O. Arık and Tomas Phister, Google Cloud AI
arXiv:1908.07442v4 [cs.LG] 14 Feb 2020

ABSTRACT
We propose a novel high-performance and interpretable canonical deep tabular data learning architecture, TabNet. TabNet uses sequential attention to choose which features to reason from at each decision step, enabling interpretability and more efficient learning
as the learning capacity is used for the most salient features. We demonstrate that TabNet outperforms other neural network and decision tree variants on a wide range of non-performance-saturated tabular datasets and yields interpretable feature attributions plus insights into the global model behavior. Finally, for the first time to our knowledge, we demonstrate self-supervised learning for tabular data, significantly improving performance with unsupervised representation learning when unlabeled data is abundant.

Overall, we make the following contributions in the design of our method:
(1) Unlike tree-based methods, TabNet inputs raw tabular data without any feature preprocessing and is trained using gradient descent-based optimization to learn flexible representations and enable flexible integration into end-to-end learning.
(2) TabNet uses sequential attention to choose which features to reason from at each decision step, enabling interpretability and better learning as the learning capacity is used for the most salient features (see Fig. 1). This feature selection is instancewise, e.g. it can be different for each input, and unlike other instance-wise feature selection methods like [6] or [61], TabNet employs a single deep learning architecture with end-to-end
learning.
(3) We show that the above design choices lead to two valuable properties: (1) TabNet outperforms or is on par with other tabular learning models on various datasets for classification and regression problems from different domains; and (2) TabNet enables two kinds of interpretability: local interpretability that visualizes the importance of input features and how they are combined, and global interpretability which quantifies the contribution of each input feature to the trained model.
(4) Finally, we show that our canonical DNN design achieves significant performance improvements by using unsupervised pre-training to predict masked features (see Fig. 2). Our work is the first demonstration of self-supervised learning for tabular data. 

とても良さそうな手法だけど、論文をいくら読んでもだめだな。

実際に使ってみないと。

GitHubに、TabNetが、いくつも出ています。

こういうのを使えないのがなさけない。

なんとかしなければ。

 

11月22日(日)

MoA:4,094 teams, 9 days to go

これまでよりスコアの良いコードを用いて、NNの部分だけ、チューニングしてみた。

自信を持って自分のチューニング結果をsubmitしたところ、最後の桁の数値が+2と+4になった。

公開するだけのことはある、と、感心するばかりである。

 

11月23日(月)

MoA:4,124 teams, 8 days to go

CVはほとんど変わらず、むしろ、わずかではあるが少し大きかったにもかかわらず、LBが、-4も下がった。 

こんなことがあると、CVが少し大きかったためにsubmitしていない計算条件がたくさん残っているのが気になる。その中に、宝物が隠れているかもしれない。

そうではなく、これが、もしかして、public dataへのoverfittingなのか?

 

11月24日(火)

MoA:4,122 teams, 7 days to go

昨日うまくいったベストLBモデルをさらに改良できないかとパラメータを変更してみたが、そう簡単にはいかない。

パラメータの、小さな変更によって改善されることを期待したが、いずれも、最後の桁が+2もしくは+3となった。

難しい。

 

11月25日(水)

MoA:

チューニングを繰り返すのみ。

月曜日にメダル圏内に入ったのに、もう、追い出されて、どんどん離れていく。

 

11月26日(木)

MoA:4,201 teams, 5 days to go

public LBスコアを上げることだけ考えてチューニングしている。

 

Lyft 

本日午前9時00分終了。

課題に適合するモデルの選択と、train時間の確保が、後半の課題だった。

データが膨大で、前処理が複雑にみえて、不十分な取り組みとなってしまった。

複雑なデータに取り組む練習をしないと、こういう課題はクリヤできそうにない。

 

<雑談>

自分は、この分野には、ディープラーニングから入った。データを呼び出し、それを、train_data, validation_data, test_dataに分け、DNNモデルに投入する。最初に使ったテキストでは、いわゆるデータの前処理は、簡素化されていた。ある程度、モデルが組めるようになったので、Kaggleに挑戦した。そこには大きな壁があった。データの前処理と後処理である。データサイエンスのテキストは、ディープラーニングのテキストとペアで購入していて、並行して勉強しようとしたのだが、面白くなかった。それに対して、ディープラーニングは、AIの歴史とともに語られ、インターネット、ビッグデータ、その集大成としてのディープラーニングというふうに続いていて、非常に興味が湧いた。

手元にあるデータサイエンスの本は、和訳で360ページくらいのものだが、機械学習の内容が始まるのは、165ページからである。単純にいえば、自分には、この前半部分の勉強が足りてない、ということになる。今日から、まず、前半部を勉強するとしよう。

 

Riid!:2,062 teams, a month to go

このコンペ、MoAが終われば集中して取り組むつもりだが、MoAはチューニングのみなので、計算の合間に、こちらも進める。

Riiid! Answer Correctness Prediction

Track knowledge states of 1M+ students in the wild

課題は、生徒の学習履歴から、正答率を予測することのようだ。

用いるデータは、EdNetと称するもののようだ。

EdNetというネーミングは、ImageNetを意識したものだろうか。

主催者がすでにそれらしい論文を出している。

SAINT+: Integrating Temporal Features for EdNet Correctness Prediction

DONGMIN SHIN, YUGEUN SHIM, HANGYEOL YU, SEEWOO LEE, BYUNGSOO KIM, and
YOUNGDUCK CHOI, Riiid! AI Research, Republic of Korea

arXiv:2010.12042v1 [cs.CY] 19 Oct 2020

 

11月27日(金)

MoA:4,232 teams, 4 days to go

最終日が近いので、とりあえず、LBスコアの良いモデルに対して、試行回数を増やすなどして、少しでも汎用性を高くしておこう。

試行回数を増やすと、順位が少し上がった。

 

  • Riiid AIEd Challenge
  • :2,076 teams
  • , a month to go

データベース、EdNetに関する論文を見ていたら、EdNetは、韓国の学生の約2年間にわたるTOEICの学習履歴データを収集したものであることがわかり、さらに、santaというワードが気になってgoogleで検索したら、次のような宣伝が出てきた。

SANTA TOEIC

世界的な学会から認定されたAI技術を搭載したTOEIC®︎学習ソリューションです。
“AIチューター”が解答傾向から苦手問題を推測し、あなただけのカリキュラムを構築。
解くべき問題だけに集中することで、短期間で大幅なスコアアップを実現します。

すでに、スコア予測システムは出来上がっていて(上記論文ではAUCが0.80前後)、商品に組み込まれているようだな。さらに性能を向上させることを狙って、Kagglerの知恵を拝借ってことなのか。

Time-series API Details

  • Refer to the starter notebook for an example of how to complete a submission. The time-series API has changed somewhat from previous competitions!

とりあえず、starter notebookを見る。

 

11月29日(日)

MoA:4,287 teams, 2 days to go

締め切りまで、あと2日、となった。

メダル圏内に0.01825が160件あまり、並んでいる。

公開コードがあるので、こういうことになるのだが、9日前に公開されたときには無視していた人たちも、間際になると、保険のつもりで使ってみるのだろうな。

かくいう自分も、最終投稿の2件のうちの1件はこれにしようかなと思って準備している。

 

11月30日(月)

MoA:4,332 teams

今日が実質、最終日だ。

とりあえず、メダル圏内に入った。

圏外で待つよりは、圏内で待つ方が、メダル獲得の可能性は高い、だろう、と思いたい。

 

12月1日(火)

MoA:4384チーム:終了

暫定結果だが、182位となり、銀メダル相当である。

このまま確定すれば、2個目のメダル獲得となり、エキスパートになる。

最終日の投稿結果を選んだことによって、銀メダル相当となった。

最終的に2件の投稿を選ぶのだが、このとき違うものを選んでいれば、違った結果になる。

過去に、メダル圏内の投稿結果を最終投稿として選ぶことができなかったことでメダルを逃したことが2回ある。1回は、public LBが良くなかったので仕方ないともいえるものであるが、もう1回は、Public LBスコアにこだわりすぎて、アンサンブルのし過ぎによるpublic_dataへのオーバーフィッティングを意識できなかったことによるものである。

さて、うまくいった原因を書きたいのだが、自分の今後の指針になるようなものは、残念ながら、いまのところ思いつかない。

 

 

f:id:AI_ML_DL:20201101113720p:plain

style=157, iteration=1

f:id:AI_ML_DL:20201101113848p:plain

style=157, iteration=20

f:id:AI_ML_DL:20201101113944p:plain

style=157, iteration=500