JSPS特別研究員-DC1に採用内定した話
どうも。先日DC1の(一次)採用内定を頂いたので、今後JSPS特別研究員に申請する人のためにも、自分のことや申請書について書ける範囲で書いていこうと思います。
ちなみに審査区分は化学/機能物性化学関連です。
目次
1. 自分について
1-1. D進を決めるまで
B4の4月に研究室に配属されたときは、D進という選択肢もあるんだなあという程度にしか考えてませんでした。もともとドクターの多い研究室だったので学振持ちの先輩も多かったですし、情報を早くから知れていたのは恵まれていたかなと今になると思います。まあやってみて研究が楽しくてもっと研究したいとか、この道しかないと思ったらD進するかなあと思っていました。
そこから研究はぼちぼち頑張りました。研究しておけば就活にしろD進にしろ役に立つと思ったので、研究を頑張って損はないなと考えていました。
研究はあまり思うようには進みませんでした。B4M1の技量なんてそんなものかと思える程度ですが。そこで実験を止めなかったことで、そこで作った分子から論文としてまとめることができたので、今考えてみると手を動かし続けてよかったと思います。
私がD進を決めるにあたって、今考えてみると重要な転機が2つありました。
M1になったくらいの時、1つ目の転機が訪れました。コロナウイルスです。コロナウイルスの影響で研究室は1ヶ月程度原則実験禁止となり、これまで実験していた12時間が丸々あきました。これを機にプログラミングをやってみようと思い、AtCoderに登録しました。その後も半年ほど毎日欠かさず精進を続けた結果、上位7-10%程度に相当する青色まで到達することができました。
2つ目の転機は1つ目の後すぐ訪れました。雑誌会で機械学習による力場を用いたMD計算について取り上げたところ、指導教員である先生が機械学習と実験の融合研究を提案してくれました。内容については公開することはできませんが、かなり魅力的な共同研究で、自分が本当にやりたい研究に近いと感じました。この内容についてはこの時点で話が出た程度で現在まで進捗はそこまでありませんが、D進したらそのような研究ができるという点でD進には間違いなくプラスに働いていたと思います。
しかし、この時点ではD進を確定させてはいませんでした。インターンシップにも3社行きましたし、修士を出て就職するのが9割、D進が1割程度に考えていました。
幸いにも富士フイルムのインターンシップを通じてBrain(s)コンテストというものがあること、その年のテーマはマテリアルズインフォマティクスであることを知りました。テーマが自分の興味のど真ん中だったので、M1の12月は有機合成そっちのけでコンテスト課題の実装を行っていました。集中して取り組んだ結果としてマテリアルズインフォマティクスについてのノウハウや、実装力、さらには1位という実績を得ることができました。そのことについてはこちらをご覧ください。
私がD進を決めたのは、M1の12月末でした。指導教員と話した結果、D進するなら修士からOAとして研究活動に賃金がつき、学振が通らなくても博士後期課程で学振相当額までなら出せるということでまとまりました。ここから博士後期課程での生活費の心配がなくなったのと、共同研究で行っている方向で研究を進められるという点から、D進することに決めました。(この時点で就活は、ある企業の最終面接の直前でしたが、キャンセルして退路を断ちました。)
1-2. D進を決めてから
この時点で私の名前の入った論文が0報であったため、急いで論文化に向けた実験を進め始めました。ここから学振提出までの5か月間は人生で一番頑張ったかもしれません。
幸いにもこの時点で自力で合成した未報告分子があったので、その分子について物性・機能を調べて論文をまとめる方向で研究を進めることにしました。この分子は光に不安定であることが分かっており、物性測定で苦戦する部分も多かったのですが、なんとかデータを集めていきました。
この他にも高分子に関する興味深い現象を発見していたのですが、そのメカニズムがまだ解明できておらず、解明してから論文として投稿したかったのでそちらはいろいろ落ち着いてから腰を据えて取り組むことにしました(研究に関する自身の強みで書ける程度には解明のための実験を行いました)。
結果としてゴールデンウィークに研究内容がまとまり、5/3に論文を投稿することができました。学振の学内締め切りが6/9の午前9時であったため結構ギリギリでしたが、5/27に無事アクセプトされました。
1-3. 申請書作成のスケジュール
申請書作成は、主に3月末からスタートしました。実際に作成する前に研究計画の方向性がある程度固まっていたのでこの時期からでも間に合ったと思いますが、本当に0から研究計画を考えるとしたら年末くらいから文献調査を始めて研究計画を練ってもいいのかもしれません。
4月頭の時点で4.【研究遂行力の自己分析】と5.【目指す研究者像】は成果の部分以外の初稿を書き上げて、推敲に入っていました。しかし2.【研究内容】の部分はゴールデンウイークが明けても書きあがっておらず、そこから集中して取り組みました。
5月中旬ごろに初稿が完成し、そこから研究室の先輩や同期、後輩に見てもらいました。言い回しや文章構成を修正してもらい、この段階で完成度がぐっと上がったと思います。
5月下旬ごろに一度指導教員に見てもらったところ、2.(1) 研究の位置づけが今のままだと、研究の良さが伝わらないとコメントを頂きました。そこで一度このページを白紙に戻し、もう一度ゼロからこの項目を作り始めました。
6月の頭に、修正した申請書をもう一度指導教員に見てもらうと、内容が断然よくなったというコメントを頂き、そこから締め切り直前まで念入りに何度も推敲し軽微な修正をしたのちに電子システムに提出しました。
2. 申請書について
2-1. 審査項目について
申請書作成の前に、どんな申請書を書けば採用されやすいのかという視点に立ってみます。つまり審査項目で高得点を取ればいいということです。学振DCでの審査項目はこの2項目です:
(1) 自身の研究課題設定に至る背景が示されており、かつその着想が優れていること。また、研究の方法にオリジナリティがあり、自身の研究課題の今後の展望が示されていること。
(2) 学術の将来を担う優れた研究者となることが十分期待できること
ぱっとこれを見た感じ、2.【研究内容】で (1) が評価され、4.【研究遂行力の自己分析】と5.【目指す研究者像】で (2) が評価されるだろうと考えられます。
また審査員も人間です。当然感触のいい申請書に高得点を与え、どこか不快な申請書には低い点数をつけるでしょう。
そして審査員は研究者から選ばれているということも重要です。つまり見た目はよくても非論理的で表面的な申請書はすぐに見破られるだろうと考えました。
これらを踏まえ、申請書の作成にあたり全体として次項に示すことを特に重視しました。
2-2. 重視したこと
2-2-1. 見栄え
多くの申請書を審査員が眺める中で、見栄えはとても重要です。ぱっと見でよくかけているともちろん高評価をもらいやすいと思います。美的センスは人それぞれだと思うので一概には言えないですが、自分なりの美学をもって申請書を書き上げることはとても大切だと思います。
また文章が並ぶ中で、改行や図を入れて読むストレスを低くすることも大切だと思います。びっしり文字で埋め尽くされた申請書は審査員が心地よく読めないだろうと考え、概念図を用いた方がいいと書いてあるページ以外も1ページあたり最低1つの図を入れることを心掛けました。(これは指導教員にアドバイスしていただきました。)
2-2-2. 統一感
人間は一貫したものが好きです。そこには美しさがあり、一貫していないものには不快感が伴います。ということで、申請書全体を通して自分の考え方だけでなく、専門用語や改行の処理に揺れがないように心掛けました。具体的には、自らのやりたいことである「情報科学を活用した分子設計」、「社会的ニーズまでを見通した分子設計」について、過去~現在~未来の全ての面から一貫して主張しました。むしろその軸を先に据えたことで、その軸に合わせて記入内容を考えることができ、申請書作成における自由度を減らして負担を落とすことができたと考えています。
2-2-3. 将来性
国はなぜ博士後期課程学生などの未熟な研究者にお金を配るのでしょう。それは簡単で、国の将来につながるからです。JSPS特別研究員の制度の概要のページにも、
「特別研究員」制度は優れた若手研究者に、その研究生活の初期において、自由な発想のもとに主体的に研究課題等を選びながら研究に専念する機会を与えることにより、我が国の学術研究の将来を担う創造性に富んだ研究者の養成・確保に資することを目的として、大学院博士課程在学者及び大学院博士課程修了者等で、優れた研究能力を有し、大学その他の研究機関で研究に専念することを希望する者を「特別研究員」に採用し、研究奨励金を支給する制度です。
という記載があります。そう、我が国の学術研究の将来を担う創造性に富んだ研究者の養成・確保が目的なのです。つまり、この研究を通じて自らが成長し、やがて学術研究を担うような研究者になりそうな人材を選ぶための申請書なのです。つまり審査員に「こいつは将来に大物になるな」と思わせれば勝ちなのです。未来のことはいくらでも大げさに書けます。理想の将来像をふんだんに盛り込むといい、と個人的には思っています。
2-3. 申請書内容
申請書の内容を載せます。研究計画の詳細や未報告データ、成果欄は隠しています。
2-3-1. 研究の位置づけ
ほとんど隠していますが、レイアウトはこんな感じで作りました。
最初に軸としている「社会的ニーズ」の話からスタートし、関連する最近の研究動向を説明し、そこから自らの研究を経由して本研究計画の着想へと移っています。図を多めにして現時点での当該分野の状況・課題を説明しています。
2-3-2. 研究目的・内容等
最初に概要をまとめ、続いて詳細を書き、最後にアピールポイントを載せています。実験の詳細等を細かく書くというわけではなく、用いる道具や方向性、方策の妥当性やオリジナリティ、自らの信念、研究の原理や応用性などを具体的にアピールしています。
各項目をまとめた図と各項目のより詳細な内容の図を載せることで、できるだけ文字を読まなくてもやりたいことの本質が伝わるように心掛けました。
特に予想されるインパクト、将来の見通しの欄は、夢は大きく発散させることを意識しました。ここでの軸としている「社会的ニーズ」について触れることで、一貫性をアピールしています。
最後に申請者が担当する部分で、複数の研究者からアドバイスを頂ける状況にあることをアピールしました。
2-3-3. 人権の保護及び法令等の順守への対応
該当しない。
2-3-4. 研究遂行力の自己分析;研究に関する自身の強み
最初に全体を通しての軸を書き、その後軸に関連する強みを項目立てて書いています。ここでは次ページの成果を根拠に取ることで、説得力を上げるよう心掛けました。実験結果として論文や学会発表を参照できない部分(未報告データ、ぼかし部)は図を載せることで現象を具体的に説明しています。
2-3-5. 成果
申請時の業績は、
・査読付論文1報(3人中1番目)
・プレプリント1報(9人中7番目、投稿中)
・国内学会発表3(ポスター2、口頭1)
でした。ちなみに2つのポスター発表は英語で行いました。
この他に受賞・その他としてBrain(s)コンテストで1位を取ったこと、AtCoderのアルゴリズム実技検定で上級を取ったことを載せました。成果欄の見栄えをよくするのと、研究計画に書いたことが実現可能ってことをアピールするのにはもってこいだと思ったのでこれらを載せました。ただ業績として書くだけでは内容が審査員にわからないと思ったので、これらの成果には説明文をつけて端的に説明しています。
他にも書けることとしてITパスポート持ってるとか、教員免許もってるとか、国際学会で発表要旨採択済みとかもあると思ったけど、内容として弱かったりとか申請書のほかのパートでアピールできたりとかで、盛り込むのはやめました。
2-3-6. 今後研究者として更なる発展のため必要と考えている要素
ここでは現在or一般論~未来のことを書いています。
「世界的にインパクトを与える」や「科学の発展に貢献したい」などで将来性をアピールしています。
2-3-7. 目指す研究者像
こちらも最初の図で「社会ニーズまでを見通した分子設計」という自分の軸をアピールしています。途中でも「情報科学を活用した分子設計」という軸をアピールしています。
各項目では「自分の考え→必要な資質→過去から現在の自分がそのために何をしているか」という流れで書いており、論理的な文章になるように心掛けました。
その後の位置づけに関しても、将来性をアピールしています。特に日本化学会年会で耳にした日本学術会議の提言について盛り込んでおり、視野の広さをアピールしています。
2-4. もう一度書くなら直す点
もう一度申請書を書くとしたら、このまま提出はしないと思います。提出から発表までの4か月弱の間に色々調べているうちに、いろいろな知見が手に入ったのでそれを研究計画に盛り込むと思います。採用結果の発表前に提出した申請書に書いていない重要な先行研究を見つけてしまい冷や汗をかいたので、もっと調べておけばよかったと思いました。
2-5. 参考にした資料など
私の研究室では幸いにも先輩方の学振申請書(採用されたもの)が大量にありましたので、それはある程度参考にはなりました。
その他にも、こちらの学振本を買って参考にしました。この本の最後には採用された申請書が複数掲載されており、申請書を書く際に気にする点が事細かに書いてあります。また申請書の内容だけでなく、学振の仕組みについても書かれているので、まず買ってみる/借りて見てみることをお勧めします。
またこちらのサイトには学振を書く際に有用なサイトがまとめてあるので、一通り目を通しておくといいかもしれません。
3. おわりに
ここまで読んでくださった方、こんな長くて推敲もろくにしていない記事を読んでくださりありがとうございました。来年の学振申請書で形式が変わるかもしれませんが、この記事が来年JSPS特別研究員に申請する方の参考になれば幸いです。研究内容を考えるのは自分自身ですし、オリジナリティを表現するのも自分自身です。私がこうして申請書を共有することで、学振申請者の情報格差が縮まればいいな、と思っています。
Gaussianにて結合長固定でスキャンする
やりたいこと
原子間距離を固定し、その原子間距離を伸ばしながらoptを行う
方法
① modredundantを用いる
1変数-1結合長かグリッドサーチを行う場合
キーワードにopt=modredundant
最後に
(改行)
B 9 18 S 70 0.15
(改行)
→原子9と18の間の距離を0.15Åずつ伸ばしながら70回スキャンする
② AddGICを用いる
1変数-複数結合長に対して計算する場合
キーワードにopt=AddGIC
最後に
(改行)
Bond1 = R(9,18)
Bond2 = R(10,19)
Sum = (Bond1+Bond2)*0.529177
Dist(freeze) = Bond1-Bond2
Sum(NSteps=70,StepSize=0.30)
(改行)
→原子9,18間距離と原子10,19間距離の差を固定しながら和を0.30Åずつ伸ばす操作を70回スキャンする(それぞれの原子間距離が0.15Åずつ伸びる)
MD計算 パラメータファイルの中身をまとめる
はじめに
MD計算のパラメータファイルの中身をいじろうとしたけど、公式Documentationが英語で書いてありあまりわからなかったので、自分が理解しやすいようまとめようと思う。MD計算を勉強していく上で知識が増えてくると思うので、理解が深まった際には頻繁に更新していこうと思う。
パラメータ
-
前処理
include
define
-DFLEXIBLE : "flexible water"を"rigid water"の代わりに用いる。normal mode analysisに有用かもしれない。
-DPOSRES : posre.itpをトポロジーに含める。位置制約を埋め込む際に用いられる。
-
実行制御
integrator
md : 運動方程式を積算する際にleap-frogアルゴリズムを用いる。
sd : 正確かつ効率的なleap-frog確率的動力学積算器。
tinit
計算を走らせ始める時間[ps]。(default: 0)
dt
積算の時間ステップ[ps]。(default: 0.001)
nsteps
積算や最小化の際の最大のステップ数。(default: 0)
init-step
計算し始める最初のステップ。(default: 0)
simulation-part
パーツ番号の指定。ファイルがクラッシュしたシミュレーションをコピーする際に有用である。(default: 0)
comm-mode
重心にどう制約を設けるかの設定。
Linear : 重心の並進速度を除く。
Angular : 重心の並進速度と重心周りの回転速度を除く。
Linear-acceleration-correction :
None : 制約を設けない。
nstcomm
中心の移動を除去するステップ数の周期。 (default : 100)
comm-grps
重心の移動を除く中心のグループ。(default : whole system)
ランジュバン動力学
bd-fric
ブラウン動力学法における摩擦係数[amu ps-1]。0に設定すると、摩擦係数は(質量/tau-t)で計算される。(default: 0)
ld-seed
熱力学的ノイズで乱数生成器を初期化するために使われる。-1に設定すると、ランダムシードが適用される。(default: -1)
エネルギー最小化
emtol
最大の力の大きさがこの値よりも小さくなった時に最小化を終了する[kJ mol-1 nm-1]。(default: 10.0)
emstep
初期のステップサイズ[nm]。(default: 0.01)
nstcgsteep
nbfgscoor
シェル分子動力学
niter
シェルオプションと弱い制約を最適化する最大のイテレーション。(default: 20)
fcstep
第5回 富士フイルムBrain(s)コンテスト 参加記録
概要
FUJIFILU AI Academy主催のBrain(s)コンテストに参加してきました。
fujifilmdatasciencechallnge.mystrikingly.com
富士フイルムの体験型ハッカソンに参加した際に、マテリアルズ・インフォマティクスの機械学習の実装コンペがあることを知り、すぐに参加登録しました。
機械学習の実装は初めてだったのですが、結果としてはQ2で3位、Q3で1位を取ることができました!商品としてとてもいいカメラがもらえました。
本記事では、その解法について紹介します。第6回以降のBrain(s)コンテストが開催された際に参考になることを期待しています。
問題概要
問題
SMILESとNa+チャネルに対するIC50のデータが3800化合物ほどに対し与えられる。N種の化合物のSMILESからIC50の値を予測するモデルを作成せよ。(実行時間制限 10分、メモリ 512MB、N <= 10^5、提出ファイル容量 10MB)
データセットはbinding DB (http://bindingdb.org/bind/info.jsp)から取ってきているようでした。では問題を読み解いていきます。
SMILES
SMILESとは、いわば「有機化合物をコンピュータが理解できるように書き表した文字列」です。SMILESが与えられればそれが示す化合物は一意に定まります。逆に有機化合物から一意に文字列変換するとcanonical SMILESと呼ばれる文字列となります。
例えばベンゼンはc1ccccc1となります。 どの原子が入っているかはアルファベットで表され、芳香環と呼ばれる環に含まれる原子は小文字で表されます。環を巻いている化合物は数字でリンクできるようになっています。(ベンゼンの例だと最初のc1と最後のc1で環をなしているということになります)
便利なことにSMILESから汎用の分子記述子を計算するライブラリがあります。今回のコンペでもそのライブラリを使い、文字列情報を分子幾何学的な特徴に変換しています。
Na+チャネル
我々生物の細胞は、細胞内のNa+濃度が一定になるように保たれており、神経系ではシグナルによってNa+が流入・流出することで先へ先へと信号を送ります。このように細胞内のNa+濃度を調節する役目を担っているのがNa+チャネルです。Na+チャネルはタンパク質でできており、折りたたまれて細胞膜を貫通しています。このチャネルに膜の内外でのイオン濃度の差やシグナル分子を与えるとチャネルが開き、Na+を選択的に細胞内外で輸送することができます。
IC50
IC50は50% Inhibitory Concentrationの略であり、タンパク質が50%機能しなくなる濃度を示します。この値が小さいほど、濃度が低くても阻害するということで、毒性が強い化合物ということになります。
ここで出てくる阻害とは、分子がタンパク質の表面にある結合部位に結合することで、タンパク質がその役割を果たせなくなることを言います。結合部位の形は決まっていて、その形に合うような分子が結合しやすい、つまり阻害しやすいということになります。
特徴量
特徴量としてはRDKit descriptor、Mordred descriptor、Morgan Fingerprintと(その二乗)に加えてTanimoto係数を用いました。
Tanimoto係数は、Fingerprintから分子の類似度を数値化したもので、この値は0~1の範囲を取ります。これが1に近ければ分子はよく類似しており、0に近ければ分子はあまり似ていないということになります。今回は外部データの使用が禁止されていたため、データセットにあった3840個の化合物とのTanimoto係数を用いました。
特徴量を作った後は、XGBoostでTotal-gainが大きい方から500個の特徴量を使うことにしました。ここで、Nが大きく10分間で計算が終わらないことがあったため、計算コストが一番大きいMordred descriptorは最大で100個までしか含められないという制約を付けて特徴量選択を行いました。
モデル
モデルは5-foldのXGBoostを使いました。最終提出はXGBoost以外にもLightGBM、Ridge回帰、多層パーセプトロン、RandomForestをスタッキングしたアンサンブルモデルでした。しかし、そこまでしっかりとXGBoost以外をチューニングしておらず性能の低いままモデルをスタッキングしていたため、XGBoost単体を上回るスコアは出なかったです。
結果
結果としては自分のスコアが1.2707、2位の方のスコアが1.3874と大差をつけて1位をとることができました。Tanimoto係数を導入する前はスコアが1.42程度だったので、分子が似たような形をしているかを表す指標を加えたことが優勝へとつながったのではないかと考えています。
雑記
ここまででまとまった解法を書いてきたわけですが、ここからはコンテストを踏まえて学んだことをつらつらと書いていきたいと思います。解法の本質はここまで示した通りであり、これ以降は私見を書き連ねます。ご了承ください。
特徴量エンジニアリングは本当に大切
機械学習を勉強したての時は、「特徴量に分子の持っている情報をすべて反映すれば、そこから有益な情報をニューラルネットワークとかが勝手に読み取ってくれて、最良のモデルが得られる」と考えていました。一通り機械学習について勉強してみた今の状況での考えは「この主張は正しいが、現実的ではない」です。理由としては回帰手法の限界がある、ということです。
例えば、x→yの機械学習において、学習データとして(x,y)=(0,0), (-1,1), (1,1), (2,4), (-2,4), (3,9), (-3,9),...があったとしましょう。このデータを線形回帰を用いて回帰しようとしても、うまくいかないことがはっきりと想像できると思います。このように、単体のモデルが表現できることはどこかに制約があり、モデルをチューニングすることによる性能の強化には限界があるわけです。
しかしそこで特徴量としてx^2を追加してやると、(x^2,y)はうまく直線に乗ってくれて、回帰の性能が上がります。
ここから何が言いたいのかというと、モデルをがっちり構築していく前に、目的変数とよい相関がある特徴量を少しでも多く作っておくことが大切である、ということです。面白い回帰アルゴリズムは多くありますし、それを学ぶことでいろいろなモデルを適用できるようにはなります。しかし真に大切なのはコンピュータに厳選された特徴量を与えることです。特徴量をむやみに増やせば、目的変数に相関がある特徴量の数は少しずつ増えていきますが、ノイズも大きくなってしまい、結果として性能は落ちてしまいます。上位を狙うのであれば特徴量エンジニアリングはしっかりとしましょう。
実装スケジュール管理
私の考える理想の実装スケジュールは以下の通りです。
1. (特徴量が与えられなければ)とりあえず特徴量を増やす。(5%)
2. LightGBMやXGBoostなどを用い、ある程度の性能が出るモデルを構築する。ここで自分の環境で特徴量の性能を評価できるCVなどを構築できるとよい。(5%)
3-1. 特徴量をひたすらいじる。どの特徴量がどのような分布をしているのか、目的変数との相関はどうか、などを調べる。自動生成した特徴量から選ぶだけではなく、問題の趣旨に合った特徴量を選ぶ。(70%)
3-2. モデルを構築していく。最終的に各モデルで最も良い性能となるものをアンサンブルするため、様々なモデルでハイパーパラメータをチューニングする。(15%)
4. 細かい調整を行う。余裕があればCVの切り方を工夫し、リーダーボードの値がどう動くかを見る。(5%)
3-1と3-2は相互に行き来しながら行うとよいと思います。
おわりに
このコンテストを通じて、私は機械学習の基本を学ぶことができたと思います。今後の研究生活でも、基礎となる機械学習を用いたアプローチの方法は変わらないと思うので、ぜひとも機械学習を道具として使って世の中に新しいものを提案していけたらいいと考えています。
ソースコード
べちゃっと張ります。
create_datasetで特徴量を抽出し、trainでモデルを訓練し、mainで回帰を行います。
最後に出した提出の方がまとまっていますが、スコア的に良かったのでそのまま載せています。ご自由にお使いください。データセットは載せられません、悪しからず。
TD-DFTでExcimerを計算する
Excimerを計算しようとしてもB3LYP-3D/6-31+G*ではうまく計算できない?
先行研究はベンゼンやピレンなどの単純な分子が多い…
J. Phys. Chem. A 2005, 109, 9174. では一応B3LYP/6-31+G*で計算しているが、分散力補正を入れていないようだ。