数理的手法を使いやすくするためのソフトウェア開発

科学技術計算とデータサイエンスについて

転職して半年、材料科学分野でのデータ分析に従事

今の職場での仕事をこなしたり学んだりするのに忙しすぎて、最近、なぜ転職したのかを忘れかけています。しかし、なぜ職場を移ったのかは、今の職場でこれからどうするかを考えるために重要なことです。なので、忘れないうちに、書いておきます。

なぜ前の職場を出ようと思ったか

フォートランプログラムのチューニングという仕事を辞めて、別の新しい仕事を始めたかったからです。ただ、計算科学シミュレーションや、前の勤務先、前の勤務先での他の仕事のどれについても悪く言うつもりはありません。

私が辞めたかったのは、チューニングの大半を占める 単純作業で、コンパイルオプションをただ変えるだけという退屈きわまりない繰り返しでした。 そして、新しい仕事を始めたくなったのは、転職前の数年間、フォートランの部署に籍を残したままで、機械学習ソフト開発の部署で仕事をさせてもらっていたからです。機械学習ソフトの開発が自分の趣味嗜好に合致していると感じたとき、決心しました。C++Python が刺激的であることに比べて、フォートランが古臭いということも、決心を後押ししてくれました。

他方で、機械学習の仕事をするようになってからも、フォートランの部署に所属したままだったので、いつかはフォートランの仕事に戻ることになると分かっていました。なので、それを避けるために、社内転職活動をするようになりました。

しかし、社内転職できないまま、フォートランの世界に戻されることが確定しました。そこで、その日から、社外への転職活動を始めました。

どんな職場に転職しようとしたか

転職先としては、学生時代からの計算科学のバックグラウンドと、最近の機械学習ソフト開発の経験の両方が活かせるところを、探すことにしました。

しかし、そんな職場はニッチ過ぎるとも思っていました。そこで、都合よくニッチな希望がかなうよりも前に、機械学習ソフト開発の経験を評価してくれる職場か、あるいは、データ分析ができる職場から内定が得られれば、そこに転職しようとも決めていました。

ところが、転職活動は私が思っていたより厳しいものでした。いや、私の年齢からすると厳しいのが当然でした。そして、転職活動の方針を考え直したほうが良いのだろうかと思い始めたときに、今の勤務先からの内定と、別のデータ分析に関連する会社からの内定、また、別の機械学習ソフト開発の会社から最終面接に進めるという知らせが立て続けに来ました。

こうして私は転職活動を終えました。

今の職場で何を目指すか

今は、計算科学シミュレーションや実験の結果を、機械学習で分析しています。バズワードで言えば、マテリアルズ・インフォマティクスの仕事です。しかし、バズワードと現実は違います。転職してから半年が過ぎましたが、マテリアルズ・インフォマティクスとして喧伝されるほどの大きなデータセットを、私はまだ、分析したことがありません。

このデータサイズの小ささについて、 マテリアルズ・インフォマティクスビッグデータでなくスモールデータを扱う分野なのだ、という人もいます。しかし、私はそうは思いません。まだ、シミュレーションや実験によるデータの収集が進んでいないからだと思っています。

なので、実験結果のビッグデータを扱えるように、また、計算科学シミュレーションでデータを効率的に収集できるように、職場の計算インフラの整備を進めています。この整備には、前の勤務先で習得したスキルが役立っています。

こうして、計算科学のバックグラウンドを活かし、機械学習で分析をして、計算機インフラの整備をしているので、転職前の希望に近いところに来れたかもしれません。しかし、悩みもあります。それは、自分の専門として、計算科学シミュレーション、機械学習、ソフト開発のどこにも集中特化しておらず、力が分散してしまっているという悩みです。

私は、数理的手法を使いやすくするためのソフト開発をしたいので、マテリアルズ・インフォマティクスを使いやすくするためのソフトウェア・プラットフォーム開発に集中したいと思っています。しかし、所属部署が安定して利益を出せるようになるまでは、シミュレーションで分析する仕事をせずに、プラットフォームを作る仕事ばかりをしているわけにはいきません。かといって、専門を絞らずにあれもこれもという状態では、生産性を上げるのが難しいのです。

あるいは、単にいろいろと勉強不足なのかもしれません。それにしても、どうしたものか。。

ニューラル機械翻訳は複数の形容詞を正しく並べられるか?

英文法のオンライン講座で、11種類の形容詞を並べるときの語順

  • (number) (opinion) (size) (shape) (condition) (age) (color) (pattern) (origin) (material) (purpose)

を習いました。具体的には、形容詞で名詞を修飾するときに、

  • 20 cute petite long clean new red lacy French silk wedding dresses

  • three attractive tall women

のような順序で並べるべきであるという規則です。

すると、この文法規則をニューラル機械翻訳に学習させることができているのかが、気になります。そこで、グーグル翻訳で試してみました。

  • [日本語の入力] 20のシルクのフランスのかわいい小柄な長くクリーンな新しい赤いレースのウェディングドレス

    • [英語の出力] 20 Silk French Cute Petite Long Clean New Red Lace Wedding Dress
  • [日本語の入力] 3人の背の高い魅力的な女性

    • [英語の出力] Three tall attractive women

出力された語順は、入力したときのままで、文法規則に沿って並べ替えられることはありませんでした。

日本語を英語に翻訳するとき、ニューラル機械翻訳が、主語・動詞・目的語などを正しい語順に並べ替えることができるのは、大量のデータでニューラルネットワークモデルを訓練したためなのだと思います。 にもかかわらず、形容詞の語順を学習させることができていないのは、訓練データのなかに、正確な形容詞の並べ替えについての十分な例が含まれていないからなのでしょうか。

MOOC(オンライン講座)のために英語力を向上させるには? (2)

あいかわらず、機械学習のオンライン講座を聴くたびに、英語力不足を感じています。しかし、情報が専門的になると日本語の情報が乏しくなってくるので、英語から逃げてばかりいるわけにはいきません。また、機械翻訳の精度が上がってきたとは言え、すべてのオンライン講座が自動翻訳されて日本語で学べるようになるまで^1待っているわけにもいきません。 そんなわけで、機械学習と並行して、英語学習も再開しました。

STEM領域の英語表現を学ぶことの効果は?

まず、前回ブログでの仮説、「英語でもSTEM領域の基礎を無理なく聞き取れるようになれば、MOOCの学習効率が上がる」に基づいて、

Coursera : English for Science, Technology, Engineering, and Mathematics

を受講して、修了しました。しかし、この講座は簡単すぎました。今でも、Machine Learning with TensorFlow on Google Cloud Platformを理解するために、あいかわらず、ビデオ講義を聞き直しています。(まあ、聞き直す箇所と回数は減ったのかもしれませんが。)つまり、これだけでは十分ではありませんでした。

初級と中級レベルのMOOCで何が違うのか?

そこで、English for STEMに対するML with TF on GCPの違いを考えてみると、次の2つです。

(1) 文が複雑、かつ、早口。 (English for STEM は初級レベルの内容を文法的に簡単で、かつ、短い文で説明していますが、ML with TF on GCPは専門的な内容を長い文で早口で説明しています。)

(2) 背景知識が少ない。(English for STEM の内容はすでに知っていたことばかりですが、ML with TF on GCPの内容には知らなかったことが多いです。)

このうち、(2)については、そもそも、知らなかったことを学ぼうとしているのですから、どうしようもありません。しかし、(1)は英語処理速度と文法理解を向上させることで、対処できるはずです。

もっと速く

それで、英語処理速度の目安として、読書スピードを入門者レベルの英文多読セットでの最後の5冊で測ってみました。平均して毎分138単語で、英語ネイティブの平均である300単語の半分以下でした[^2][^3]。なるほど、この処理速度では、毎分200単語程度で話されているビデオ講義が早口に感じられるわけです。

次に、文法理解力を測るために、Grammar in Use Intermediateの巻末テストを100問やってみると、6割弱の正答率でした。微妙です。。勉強嫌いとしては、文法なんか関係ないと言いたいところです。しかし、文法的な解釈で迷っているようでは、処理速度は上がらないのかもしれません。

そんなわけで、今は、英語処理速度^4 ^5と文法理解^6の向上に取り組んでいます。

参考

1^: オンライン講座は日本語化されていても、理解するためにある程度の英語力が必要なことがあります。例えば、Machine Learning with TensorFlow Google Cloud Platform SpecializationGoogle Cloud Platform Big Data and Machine Learning Fundamentals は、字幕は日本語化されているのですが、ビデオ講義のなかのスライドや音声は英語のままです。

2^: 日本人大学生の平均的な英語読書スピードは毎分80〜100単語で、TOEICのリーディング試験にきちんと全問回答するには毎分150単語以上のスピードが必要なのだそうです

3^: アメリカ人大学生の平均的な読書スピードは毎分450単語ということなので、彼らはビデオ講義を倍速で再生したとしても理解できるわけです。

4^: SSS推薦多読基本セット Elementary Set B エディション:SSS-3B-N

5^: SSS推薦多読基本セット Intermediate Set A エディション:SSS-4A-N

6^: Coursera "Learn English: Intermediate Grammar Specialization" offered by UCI

MOOC(オンライン講座)のために英語力を向上させるには? (1)

英語で機械学習の専門コースを聞くのは、日本語で文学史の専門家から話を聞くのに、似ています。

恥ずかしながら、私には人文系の教養がありません。それで、文学史の話は、日本語であっても、その分野の用語や言い回しを知らないので、さっぱり理解できないのです。 同様に、特徴エンジニアリングの話は、日本語では理解できても、英語では機械学習分野の用語や言い回しに慣れていないので、理解するのに時間がかかります。

いえ、正確に言えば、専門分野に特有の表現に慣れていなくとも問題ないはずです。 むしろ、STEM(science, technology, engineering, mathematics)領域の基礎的な英語表現に慣れていないことが問題なのだと思います。 実際、日本語ではSTEM領域の基礎を話したり聞いたりすることができるので、自分の専門でない分野でも、無理なく学ぶことができます。 しかし、英語ではSTEMの基礎を話したり聞いたりする力がないので、自分の専門である物性物理、生物物理、有機化学くらいしか、すんなりと理解できないのです。

となると、英語でもSTEM領域の基礎を無理なく聞き取れるようになれば、MOOCの学習効率が上がるのかもしれません。

Coursera : English for Science, Technology, Engineering, and Mathematics

MOOC(オンライン講座)の所要時間は過小に見積もられている?

先月からすべての空き時間をCourseraでデータ分析を学ぶためにつぎこんでいます。全力で学んでいるのは、Kaggleで戦えるレベルに行くために、スケジュールを前倒しして進みたいからです。しかし、今は、前倒しどころか、〆切に課題を間に合わせるのが精一杯です。情けない。。 orz

すると、MOOCsを最優先と決めているので、ほかのことはなおざりになります。 今日は出かける予定をキャンセルして、課題に取り組んでいました。 課題とテストの〆切は時差の関係で月曜日になるので、毎週月曜日は大変なのです。 今までに、なんとか2つのコースを〆切に間に合わせたものの、まだひとつのコースが残っています。

もっと、学習効率を上げたいです。問題は、MOOCのための所要時間が、公式の見積もりよりも、長くなってしまうことです。

それにしても、MOOC運営者は所要時間を過小に見積もっているのではないでしょうか。 例えば、"Machine Learning with TensorFlow on Google Cloud Platform Specialization" は、コースごとに所要時間見積もりを提示しています。 しかし、これらのなかの3つのコースを終えるために、すべて、公式の見積もり時間より長く掛かってしまいました。 この差異は、ビデオ講義の受講から生じました。 これに対して、テストや課題については、公式の見積もり時間と、私が使った時間はそれほど違っていませんでした。

つまり、私はビデオ講義を2回以上は再生しているので、どうしても、Googleによる所要時間の見積もりよりも、長く掛かってしまうのです。 おそらく、Googleの人たちは、このレベルの講義であれば、1回だけ聞けば十分に理解できるのでしょう。 ところが、私は、ノートを見直したり、早口で癖のある英語を、巻き戻して聞き直したりしています。 しかも、計算機科学の専門用語や特殊な言い回しが出てきたときには、それらの意味を調べたりしています。

他方で、この"Machine Learning with TensorFlow ..."を紹介している記事を読むと、このなかの5つのコースを1ヶ月で終えた、などと書いてあります。 となると、問題は、やはり、私の英語スキルと計算機科学の素養が不足していることにあります。 結局、中間レベル(intermediate)のMOOCを無理なく受講するには、アメリカの大学で専門科目の単位を取得できるだけの能力が必要なのかもしれません。

ともあれ、今日は、あとひとつ残った課題をがんばります。(16時間の時差のもとで〆切はすでに過ぎているのですが、採点してもらえるはず。)

機械学習エンジニア見習い

ディープラーニングを高速化したい、と言い続けていたら^1、関連部署に異動させてもらえました。それを前の上司から聞いた時には単純に喜んだのですが、今はいろいろと複雑です。仕事が進まないことに焦ったりもします。

いえ、仕事というより、その準備段階の動作テストで焦っていました。

単一ノードでGPUを使って学習させるところまでは簡単でした。ネットに情報があふれていますから、それをなぞるだけです。しかし、複数ノードではそうはいきませんでした。GPUクラスタでMPI並列を使ってディープラーニングしたというウェブ記事をなぞっても、動作しないのです。

そこで、ひたすら試行錯誤して、フレームワーク内部のコードを読んでいると、自分はまだまだ見習いだと感じます。本物の機械学習エンジニアが数カ月前に出した結果を、再現するのに一週間かかってしまいました。

機械学習エンジニアになるために学び始めた頃は^2GPUでの分散並列くらいすぐにできると思っていたのですが。。 ともあれ、基礎的なことからコツコツやっていきたいと思います。

参考

1^: 計算科学からデータ集約型科学へのワークシフト

2^: 機械学習エンジニアになるために学ぶべき5つのスキル(海外記事紹介)

研究者あるいはエンジニアの転職

研究者からデータサイエンティストへの華麗な転身^1 で有名なTJOさんが、自身の経験にもとづいて、 転職を考えているポスドクの人たちのために ブログ記事^2をまとめていました。

現役のポスドクだけでなく

その記事は、データサイエンス分野だけでなく、おそらく、 他の理工系分野のポスドクにも役立ちそうです。 そこには、転職前に検討すべきこと、転職の仕方、転職後のサバイバル法 がまとめられています。 おそらく、これから転職を考えているポスドクだけでなく、 すでに転職した元ポスドクにとっても興味深い内容です。 実際、私も元ポスドクで、10年以上前に民間企業へ転職して、 今もその企業で働いているのですが、 非常に感心しました。

なんといっても、長期的な戦略を立てて能動的に行動しているところが素晴らしい。 それに対して、私の転職は、お世話になっていた先生の紹介という受け身であり、 入社後も戦略的というよりも、流されてしまっていることが多いです。反省させられました。

社外あるいは社内での転職のために

しかし、世の中の流れを考えて、仕事の内容を主体的に選び、 そのためにスキルや知識を身につけたり、コネを作ることは、 社外へ転職するためだけではなく、社内で働き続けるためにも必要なのだと思います。 実際、去年から機械学習について学んだ結果として、 社外へ転職してはいないものの、 社内で異動してディープラーニングの高速化に従事することになりました。

こうしてみると、社外転職と社内転職を区別する理由はそれほどないのかもしれません。 そもそも、進歩が指数関数的に加速する世の中では、 科学・工学分野の同じ領域で仕事を続けることは難しくなっています。 なので、その変化に企業が適応しようとするときには、 昔のやりかたに固執する個人は職を失いかねません。 そうならずに働き続けるためには、 社内転職するくらいの準備が必要です。 他方では、その変化に個人が適応しようとしているときに、 昔のやりかたに固執する企業に未来はありません。 そんな企業と心中しないためには、社外転職するための準備が必要です。 そして、どちらの場合でも、個人として準備すべきことは、 将来の変化を見越して、次の仕事を選び、そのために学んでおくことなのだと思います。

時代の流れ

それにしても、自分が企業に就職したときと比べると、 研究者やエンジニアの雇用状況は良くも悪くもすっかり変わってしまいました。 悪いことというのは、アカデミアでの雇用が博士過程進学者が減少するほどに 厳しくなってしまったことです。かといって、民間企業はもはや終身雇用を保証できなくなっています。 しかし、良いことととして、科学・工学分野の進歩と、その産業界への波及の両方が速くなったお陰で、 新興分野でのスキルと学識を持っている人たちは好条件で職を得やすくなっています。 ですから、総合的には希望の持てる状況だと思います。

参考

^1:六本木で働くデータサイエンティストのブログ: 2012年春の転職活動について:研究者→民間企業

^2:六本木で働くデータサイエンティストのブログ: 企業に移って5年が経ちました