深層カルマンフィルタについて(1)

この記事は東京大学航空宇宙工学科/専攻 Advent Calendar2018の七日目の記事として書かれています。

adventar.org

昨年はカルマンフィルタについての記事を書きましたが、今年は引き続きカルマンフィルタについて書いていきます。といっても一年前と同じことを書いても芸がないので近年流行りのディープラーニングを用いた「深層カルマンフィルタ」[1] に関するお話です。猫も杓子もディープラーニングな時代ですから航空宇宙工学専攻でもきっとディープラーニングが花開いているんですよ、多分。

はじめに

去年に引き続きAdvent Calendarの記事がやって来たわけで、昨年のカルマンフィルタの記事が比較的好評だったのもあって、今年も真面目に専門的な話題を書いていこうと思ったわけですが、ふとすると専門無し弱者になりがちな弊学科にあって研究テーマに悩みに悩んで大した研究もしてこなかった僕としては専門的な話を他の優秀な学科民のようにはできないような気がしてしまったりしまわなかったりします。

仕方ないのであえて言うなら専門と言えないでもない状態推定のお話をしようと思ったわけですが、せっかくなので流行りに乗ってディープラーニングでもしてみむとするかと思い、深層カルマンフィルタの記事を書くことにしました。そこで早速深層カルマンフィルタについて調べ始めたのが、この記事が公開される一週間前とかになります。

なにが言いたいかと言うと、ドシロートが雰囲気で書いている記事なので大目にみてくださいよろしくお願いします。

事前知識

カルマンフィルタの復習

カルマンフィルタは、「モデルがわかっている線形システムに関して、観測誤差による影響と状態遷移誤差による影響を上手に扱うことにより精度よく状態推定を行う関数」でした。去年と微妙に文言が変わっていますがお気になさらず。

ここでキモになってくるのが、「線形モデルが分かっている」ことと「誤差に関する情報は事前に分かっている」ことが前提にある点です。現実的には線形モデルではうまくいかない場合は数多くありますし、そもそも数理モデルが存在しなようなシステムというのも一般には存在します。また、観測誤差、状態遷移誤差も実際のところ事前に確率分布が分かっているということは多くはないかと思います。

実際に式を書いてみると、時刻tの状態変数を\mathbf{x}_t、観測変数\mathbf{y}_t、制御入力を\mathbf{u}_tとして

$$ \begin{align} \mathbf{x}_{t+1} &= \mathbf{A}\mathbf{x}_t + \mathbf{B}\mathbf{u}_t + \mathbf{w}_t \\ \mathbf{y}_{t} &= \mathbf{C}\mathbf{x}_t + \mathbf{v}_t \\ \mathbf{w}_t &\sim \mathcal{N}(\mathbf{0},\mathbf{Q}) \\ \mathbf{v}_t &\sim \mathcal{N}(\mathbf{0}, \mathbf{R}) \end{align} $$

と表されるような系が対象となるわけですがこの\mathbf{A}\mathbf{B}\mathbf{C}がわからないような系というのも一般には数多く存在すると考えられます。例をあげるとすれば、

  1. ある講義を受けている受講者の学力の推移
  2. 治療を受ける患者の体調の推移

などが挙げられます1。2.は[1]で論文著者たちが利用法として挙げている例ですね。1.の例を状態推定という枠組みで見るとすれば、学力が状態変数\mathbf{x}_tに対応し観測変数\mathbf{y}_tとしてはテストのスコアが対応するでしょう。制御入力\mathbf{u}_tは講義になります。同様に、2.の例では状態変数が体調、観測変数が検査スコア、制御入力が治療になるのでしょうか?

いずれにせよ数理モデルとしての表現は容易では無いように思える例ですがこのような例に関して推定を行いたいという状況もありうるでしょう。

データからの学習

話は変わって、機械学習にうつります。機械学習、近年大流行りですよね。

先に挙げた数理モデルを論理的に構築する2のが困難な状況においても、データが豊富であればそのデータを使ってなんらかのモデルを構築することはできます。これを可能にしているのが機械学習の技術です。ここで「数理モデル」ではなく「モデル」というぼやかした表現にしているのは必ずしも数式的な表現ができる形になるとは限らないということを表現する3意味合いを持たせています。

最も単純な例として線形重回帰モデルを考えてみます。線形重回帰モデルは、説明変数と目的変数の間に線形な関係が存在するという仮定を置いたモデルになります。つまり、目的変数は説明変数の線形結合(アフィン結合)

$$ \begin{equation} y=\sum_{i=0}^N w_i x_i +b \end{equation} $$

と表されるという仮定を置いています。このとき各説明変数にかけられた係数w_iをデータを最もよく説明するように調節します。この場合であれば、ある説明変数\mathbf{x}_jに対応した目的変数y_jがあるとしてこの説明変数に対してモデルが出力する値を\hat{y}_{j}とするとモデルの予測値と目的変数の値から計算される二乗誤差\sum_{j=1}^M (y_j - \hat{y}_j)^2を最小化するように係数を調節する、などが妥当です。

この例は教師あり学習の例ですが、基本的に教師あり学習はどの手法であっても根っこの部分では同じ思想に基づいていると言えます。すなわち、

  • データには説明変数と目的変数のセットがあります。
  • モデルは説明変数と目的変数の関係を表現するようにフィッティングさせます。
  • フィッティングの作業はモデルの予測値と目的変数の値を近づける4ようにします。

だいぶざっくりした話ですが、この考え方を使えば適切なモデルとデータを用いることで先に挙げた状態方程式・観測方程式が数理モデルとして与えられない場合にも対応できそうな気がします。

とまあ、ここまで話してきたわけですが実のところデータが豊富にあってただ単に説明変数と目的変数の関係が抽出したいのならばカルマンフィルタの良さというのは使うことなく終わるので機械学習のモデルを組めば良いわけです。もう一度カルマンフィルタとは何だったのかを振り返ってみると

「モデルがわかっている線形システムに関して、観測誤差による影響と状態遷移誤差による影響を上手に扱うことにより精度よく状態推定を行う関数」

でした。ポイントとなるのは後半の「観測誤差による影響と状態遷移誤差による影響を上手に扱うことにより精度よく状態推定を行う」の部分です。精度よく状態推定を行うと言っていますが、これは誤差の伝播を評価して事後確率分布の誤差分散が小さくなるようにしていくと言い換えることもできます。

ニューラルネットワークについて

話はニューラルネットワークに飛びます。

ニューラルネットワーク機械学習のモデルの1つになります。さまざまなアーキテクチャやバリエーションがあるためその全てを紹介することは出来ませんが、基本となる部分は同じですのでその部分についてまず紹介します。

ニューラルネットワークを構成するのは人工ニューロンと呼ばれる素子です。ニューロンは複数の入力を受け取り1つの出力を吐き出す関数と見ることが出来ます。人工ニューロン内部では次のような演算を行っています。

  1. 入力の重み付き線形和をとる。
  2. 重み付き線形和の値を非線形な活性化関数に通す。
  3. 活性化関数の出力値を人工ニューロンの出力値とする。

f:id:koukyo1213:20181206131954p:plain
人工ニューロン

ポイントとなるのは重み付き線形和と、活性化関数です。

まず重み付き線形和ですがニューラルネットワークをデータに対してフィットさせるときに調節するのはこの重み付き線形和の各入力に対する重みの値です。この値を適切に調節することで説明変数と目的変数を結ぶ関数を表現できるようにします。活性化関数はの役割は、ネットワークの出力に非線形性を加えることです。ここが線形関数だったり重み付き線形和をそのまま出力していたりするとネットワークは全体として線形になってしまいます。

非線形関数としてよく使われるのはシグモイド関数5

$$ \begin{equation} f(x) = \frac{1}{1 + \exp(-x)} \end{equation} $$

ReLU関数

$$ f(x) = \max (0, x) $$

tanh関数

$$ f(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} $$

などがありますがいずれも微分値が存在し6、容易に計算できるものです。これらを使って1つの人工ニューロンを関数として表現すると

$$ \begin{equation} f(x) = h\left(\sum_{i=0}^{N} w_i x_i + b\right) \end{equation} $$

となります。h(\cdot)が活性化関数です。

ニューラルネットワークはこの人工ニューロンを多数まとめた層をいくつも積み重ねるようにして構成し、層から層へ値を伝播して変換を施していくようなモデルです。

f:id:koukyo1213:20181206162355g:plain
人工ニューラルネットワーク

このとき、一番最初の層は説明変数の入力を受け取るため入力層と呼ばれ、最後の層は目的変数の予測値を出力するため出力層と呼ばれます。間の層は中間層、隠れ層などと呼ばれますがこの中間層の存在がニューラルネットワークが複雑な関数に対しても高い近似性能を誇る理由となっています。

深層ニューラルネットワークまたの名をディープラーニングはこの隠れ層が一般に2~3以上になった深いネットワーク構造に対する呼称ですが実際のところ明確な定義はありません。

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

ニューラルネットワーク教師あり学習アルゴリズムの1つ7なので、学習データに対するフィッティングの作業があり、その作業が学習と呼ばれるという点は機械学習一般の話と変わりません。この場合もやはり、予測値と目的変数値から計算される損失関数を最小化することでフィッティングを行います。この際には微分が重要となってきます。

人工ニューロンを1つとってみたとき、出力値に対する重みによる微分というものを計算することを考えます。いま、人工ニューロンの入力と出力の計算において

$$ \begin{align} y &= \sum_{i=0}^{N} w_i x_i + b \\ f(\mathbf{x}) &= h(y) \end{align} $$

のように書くことにすると、その出力に対する重み \mathbf{w}による微分とは

$$ \begin{align} \frac{\partial f}{\partial \mathbf{w}} = \frac{\partial h}{\partial y} \cdot \frac{\partial y}{\partial \mathbf{w}} \end{align} $$

となります。この右辺第一項は活性化関数に依存しますが、入力から出力へと値を伝播するとき(forwardといいます)に計算した値を保存しておくことで効率的に計算することができます。

また右辺第二項は入力されたベクトル\mathbf{x}そのものになります。

さて、このように人工ニューロンは出力に対する重みの微分が簡単に求められるのですが、これは多層に重なっていても同じです。同様にして各演算についての偏微分の積になりますので、出力層での出力値に対する第一層の重みによる微分みたいなものも簡単に求められます。

ニューラルネットワークの学習においては、損失関数に対する各重みによる微分というものを計算します。この重みによる微分の意味を考えるとその重みを少しずらした時にどれくらい損失関数の値が変わるかを表現していると言えますので、損失関数の値が小さくなるように微分値を用いて各重みを更新してやれば損失関数を最小化することができます。

もちろん、損失関数は山あり谷ありなことがほとんどですので、単純に損失関数値が下がる方向にだけ調節しても大域的な最適解というものに辿り着かないこともあります。そこのあたりの最適化に関しては今回は割愛させていただきます。

潜在変数モデル

またまた、話は飛びます。カルマンフィルタのような、観測変数の背後に非観測の状態変数の存在を仮定するモデルを潜在変数モデルと言います。潜在変数モデルの考え方は機械学習の世界では非常によくみられます。これは、潜在変数モデルにおける潜在変数の考え方が機械学習の適用先となる現実世界の問題設定によくある階層構造やデータの分布構造をよく表現できているからだと考えられます。

カルマンフィルタは潜在変数が時系列性を持つ隠れマルコフモデルですが、それ以外にも単語群の出現の背後にトピックと呼ばれる潜在変数の存在を仮定するトピックモデルや、変分オートエンコーダも潜在変数モデルの1つと考えることができます。

今回、深層カルマンフィルタを理解する上でこの変分オートエンコーダを潜在変数モデルの1つと考えることがキモとなります。

潜在変数モデルにおいてよく現れる考え方として、潜在変数の分布が観測変数の分布の事前分布となる、すなわち潜在変数の取る値が観測変数を生成する分布のパラメータとなる、というものがあります。実際トピックモデルなどにおいてはトピックと呼ばれる潜在変数の分布をディリクレ分布として仮定し、その値に応じて各単語の出現確率を決定する多項分布のパラメータが変化する、というLDAというモデルが一般的に用いられます。

変分オートエンコーダ

変分オートエンコーダの説明をする前に、オートエンコーダについて簡単に触れておこうと思います。

オートエンコーダは、ニューラルネットワークによる次元削減の教師なし学習アルゴリズムの1つです。オートエンコーダは入力に対応した出力として入力と同じデータを用います。

f:id:koukyo1213:20181207113355p:plain
オートエンコーダの構造

上の図のような構造のニューラルネットワークの入力と出力に同じデータを与えた場合このネットワークが学習するのはなんでしょうか?

左半分のネットワーク、すなわち入力から中間層へと流れていく部分に関しては、層を挟むごとにどんどん層のサイズが小さくなるようにします。これにより、入力データをより圧縮したような中間的な表現が中間層には現れることになります。そして右半分の中間層から出力層へと流れていく部分では、この圧縮された中間的な表現を再度拡張して元の入力と同じようなデータを出力するようにしています。結果としてこの構造をもったニューラルネットワークの入力と出力に全く同じデータを与えた場合には、そのデータの本質的な部分のみを抜き出したような表現が得られると考えられます。この中間表現を得ることは画像や自然言語など情報が疎な構造に分散している場合には有効であると考えられています。

このオートエンコーダを先のニューラルネットワークの学習という観点で見直すと、説明変数と目的変数が同じものになっていると考えれば教師あり学習の枠組みで捉えることが出来ます。したがって出力の予測値と出力(入力)が近づくと小さくなるような損失関数を与えてやりそれを最小化するように学習すればネットワークはそのデータに対してフィットしたということが出来ます。

さて、変分オートエンコーダでは、オートエンコーダでは特に制限を加えなかったこの中間層に関して、多次元標準正規分布に従うような制限をかけることを考えます。これにより、例えば画像群に関してフィットさせると各画像は中間層においては標準正規分布を構成する一点として配置されるようになります。そして、学習データが射影されていない点というのをその正規分布からサンプリングすることで学習データには含まれないデータを得ることが出来ます。このように、学習によって分布を得るような機械学習のモデルを生成モデルと言いますが、これが生成モデルと言われるのは学習データにはないデータも生成できるから、という背景があります。

変分オートエンコーダは、オートエンコーダの中間表現を標準正規分布を構成するような制限をかけたもの、ということはわかりましたがこれをどのように実現するのでしょうか?

世の中には変分オートエンコーダに関する説明がいろいろと溢れていますのでそれらとの差異を出すためにも、ここではお気持ちについて詳しく述べていこうと思います。

まず、標準正規分布を構成するように制限をかける、という点に関してですが、これは「エンコーダでの行き先の分布を標準正規分布にできるだけ近づける」ということを行って実現します。ここで分布同士の近さを表現する指標としてKullback-Leiblerダイバージェンスと呼ばれる指標

$$ \begin{equation} D_{KL}[p(x)||q(x)] = \int p(x) \log\frac{p(x)}{q(x)}dx \end{equation} $$

と呼ばれるものが導入されます。この指標は、分布が完全に一致する場合には0となり、それ以外の場合は正の値をとります。また、一般には非可換です。したがってこの値を0に近づける(=最小化する)ようにすれば、2つの分布は近づいていくことになります。

エンコーダでの行き先の分布を標準正規分布に近づけるためにはエンコーダの出力が分布(のパラメータ)になっている必要があります。したがって、エンコーダ部分に関して言えば、さきにニューラルネットの学習で述べた損失関数としてこのKullback-Leiblerダイバージェンスを設定し、エンコーダの出力としては多次元正規分布のパラメータ\mu\Gammaを設定します。これらの値がKLダイバージェンスを最小化するように学習をすすめればいいのです。

一方で、エンコーダで標準正規分布を近似するように構成された潜在変数をデコーダでは入力データを再構成するように復元してやる必要があります。これを実現するために潜在変数からデコードされたデータと入力データの再構成誤差

$$ \begin{equation} \sum_{i=1}^{D} \left( x_i \log y_i + (1 - x_i) \log (1-y_i) \right) \end{equation} $$

を最小化するようにしてやります。この2つの和を最小化するように学習をすすめることで、エンコーダの行き先の分布を標準正規分布に近づけるようにしながら入力と出力ができるだけ同じようになるニューラルネットワークというものを得ることが出来ます。

f:id:koukyo1213:20181207175757p:plain
変分オートエンコーダの構造

深層カルマンフィルタとは

ここまでくるともうお気づきの方も多いかもしれませんが、深層カルマンフィルタとは状態方程式\mathbf{x}_{t+1} = \mathbf{A}\mathbf{x}_{t} + \mathbf{B}\mathbf{u}_t + \mathbf{w}_tや観測方程式\mathbf{y}_t = \mathbf{C}\mathbf{x}_t + \mathbf{v}_tを深層ニューラルネットワーク(DNN)に置き換えたものになります。

数学的な表現をすると、記号の定義は同じとして

$$ \begin{align} \mathbf{x}_{0} &\sim \mathcal{N} \left(\mu_{0} , \Gamma_{0}\right) \\ \mathbf{x}_{t} &\sim \mathcal{N} \left( G_{\alpha}(\mathbf{x}_{t-1}, \mathbf{u}_{t-1}, \Delta t), S_{\beta}(\mathbf{x}_{t-1},\mathbf{u}_{t-1}, \Delta t) \right) \\ \mathbf{y}_{t} &\sim \Pi (F_{\gamma}(\mathbf{x}_{t})) \end{align} $$

となります。このうちG_{\alpha}(\cdot)S_{\beta}(\cdot)F_{\gamma}(\cdot)の部分がDNNで表現されているというのが深層カルマンフィルタです。この、G_{\alpha}(\cdot)S_{\beta}(\cdot)の部分をエンコーダ、F_{\gamma}(\cdot)の部分をデコーダと考えると、これは変分オートエンコーダに非常によく似たモデルであることがわかります。変分オートエンコーダとの違いがどこにあるかというと、制御入力\mathbf{u}があることと状態変数\mathbf{z}_tが時系列性をもつ、すなわち

$$ \begin{equation} q_{\phi}(\mathbf{z} | \mathbf{x}, \mathbf{u}) = \Pi_{t=1}^{T}q(z_t | z_{t-1}, x_1, x_2, \cdots, x_T, \mathbf{u}) \end{equation} $$

となっている点です。また、用途としても変分オートエンコーダが主にデコーダを用いて未知画像を生成する、といった用途を考えている8のに対し、深層カルマンフィルタではエンコーダ、すなわち観測データと制御入力の系列から状態を推定する方がメインになっている点が異なります。

このq(z_t | z_{t-1}, x_1, x_2, \cdots, x_T, \mathbf{u})はエンコーダ部分に対応しています。デコーダ部分に関して言えばやっていることは変分オートエンコーダと変わりません。

このネットワークの学習においてはどのような損失関数を最小化すれば良いのでしょうか?ここでも、詳細な証明は元の論文[1]が詳しいため割愛させていただくとして、お気持ちだけ書いておこうと思います。

まず、デコーダ部分は潜在変数を入力としてエンコーダに入ったデータと全く同じデータが出力されるようにしたいため再構成誤差を最小化するようにします。この部分は変分オートエンコーダと変わりません。

変分オートエンコーダと大きく異なるのが、状態遷移が存在する点です。結論から言えば変分オートエンコーダがエンコーダとデコーダの2つのネットワークを用いていたのに対し、深層カルマンフィルタではエンコーダとデコーダと状態遷移の3つのニューラルネットワークを使います。ではどのようにしてこれを学習するか、というと初期状態については初期の潜在変数分布とエンコーダの出力の分布を近づけるようにKullback-Leiblerダイバージェンスを最小化するのですが、それ以降の時間ステップに置いては、状態遷移のニューラルネットワークの出力と、1ステップずれた観測変数+制御入力の入力があったエンコーダの出力の分布を近づけるように学習していく、という点が変分オートエンコーダとの大きな違いです。

f:id:koukyo1213:20181207224131p:plain
Deep Kalman Filterのアーキテクチャ

まとめ

今回は深層カルマンフィルタの説明を行いました。変分オートエンコーダの理論的な詳細や深層カルマンフィルタの理論的な説明は僕の理解力不足もあっておざなりになってしまったので今後余裕があったら追加していこうと思います。また、実装に関してもできたらいいなと思っています。かなり中途半端ですが、アドベントカレンダーに間に合わせるために今回は一旦ここで終わりにしたいと思います。

参考文献

[1] Krishnan, Rahul G., Uri Shalit, and David Sontag. "Deep kalman filters." arXiv preprint arXiv:1511.05121 (2015).

[2] Kingma, Diederik P., and Max Welling. "Auto-encoding variational bayes." stat 1050 (2014): 10.

[3] Variational Autoencoder徹底解説
https://qiita.com/kenmatsu4/items/b029d697e9995d93aa24

[4] 猫でも分かるVariational AutoEncoder
https://www.slideshare.net/ssusere55c63/variational-autoencoder-64515581

[5] DL_hacks_20151225
https://deeplearning.jp/wp-content/uploads/2017/07/DL_hacks_20151225.pdf

[6] 深層カルマンフィルタ
http://ubnt-intrepid.hatenablog.com/entry/2016/10/10/205229

[7] 著者GitHub
https://github.com/clinicalml/structuredinference


  1. 正確にはこの二例はおそらく非線形になるので、\mathbf{A}\mathbf{B}\mathbf{C}が分かっていない場合の例としては不適切だが説明の手間を考えてごまかしています。

  2. 論理的に構築する、というのがなんともぼやかした言い方ですが、自然科学の伝統的方法を鑑みるに「データからの法則性の抽出」と「法則性の適用と組み合わせ」によって数理モデルは成り立っているというのが個人的な見解です。この「法則性の適用と組み合わせ」を「論理的に構築する」と表現したつもりです。

  3. 数理モデルの定義としてこれが妥当なのかはよくわからない。

  4. 近づけるという表現が結構曖昧ですがまあここはごまかしています。

  5. \expの中身に実数倍かけたものであることもあります。

  6. 正確にはReLUはx=0微分不可能であるが劣微分により、x > 0で1、x \le 0で0とする。

  7. それ以外の使い方もありますが

  8. 違うかもしれない

GCI優秀者研修旅行【パリ編】

はじめに

この記事はGCI優秀者研修旅行のパリ編です。

GCI優秀者研修旅行とはなんぞや?という方はこちらをご覧ください。

パリ到着 - 夜まで

前の記事ではユーロスターでパリに向かうところで終わったのでその続きから始めます。

パリについたのはお昼すぎだったのですが、なかなかタクシーが捕まらず徒歩でホテルまで行きました。パリはひったくりが多いと聞いていたので内心結構警戒心強めでした。

f:id:koukyo1213:20181025112928j:plain
道すがら見かけた教会

ついてからしばらくホテルにチェックインできなかったのですが、荷物を置いたらすぐに次の訪問先のEcole42に向かいました。

f:id:koukyo1213:20181025114005j:plain
パリのホテルの中庭

Ecole42

Ecole42はパリにある私設のプログラミングスクールです。学校、と言っても卒業することで特別な資格がもらえるわけではないとのことでしたが、それでも毎年1万人以上の応募があるのだとか。その秘密はいくつかあるのですが、いくつか紹介しようと思います。

f:id:koukyo1213:20181025114732j:plain
Ecole42

この学校の面白いところは先生がいないことです。いるのは生徒とスタッフだけで基本的に生徒たちは用意された課題(プロジェクト)を解いて行くという形で学習をして行きます。

f:id:koukyo1213:20181025144927j:plain
Ecole42のシステム

生徒たちは上の写真のようなシステムを用いてプロジェクトを進めます。この水色になっているところがすでに完了済みのプロジェクトで、やや明るい灰色の部分がこれから始められるプロジェクト、暗い灰色の部分はまだ手をつけることができないプロジェクトです。このプロジェクトは、スタッフが用意したものもあれば、生徒が作ったものもあるとのことでした。

扱う内容は多岐に渡り、シェルの作成やWebプログラミングからOSやセキュリティ、アルゴリズム、果ては機械学習まで様々なものが用意されているとのことでした。

卒業の要件というものは明確に定められていないとのことでしたが、学生たちは入学するとまずピシーヌと呼ばれる一連のプロジェクトに携わることになります。この期間は、他の学生から助けを受けることができず自分一人でやり方を発見していかなければいけない期間ということですが、これを修了するとその後は、すぐにやめてもいいしそのまま続けても良いとのことでした。

さらにこのEcole42がすごいのはこの環境が無料で提供されていることです。この学校はフランスの大富豪による寄付で成り立っており、生徒たちは一銭も払うことなく居続けることができるとのことでした。

f:id:koukyo1213:20181025152738j:plain

OECD

f:id:koukyo1213:20181025151854j:plain
OECD

Ecole42での見学を終えた後、僕たちはOECDで松尾先生が講演をするのについて行きました。

ここでは、OECDに日本の様々な官庁から出向している官僚が集まっておりそこで松尾先生が人工知能の導入とその影響や各国の反応などを講演しました。僕たちはそれを傍で聞いているという形でした。

この内容に関しては、松尾先生がよく講演しているもの(年間200回以上同じ内容の講演をしているとのことでした)でしたが、それを聴く人たちの反応を見ているのはなかなか面白かったです。松尾先生も話し方を僕たち学生にするときとは少し変えていて、あとでそのことについてお聞きしたら話の掴みで何人かよくうなずく人を見つけておき、その人たちの反応を見ながら聴衆に合わせた難易度の話し方をするようにしているとのことでした。

食事

この日の夜はフランス料理を食べましたが、お肉とレモンキャビア?みたいなのが美味しかったです。

f:id:koukyo1213:20181025152945j:plain
お肉

2日目-パリ観光とベルリンへの移動-

2日目はある程度の暇をいただいていたので、パリ観光をしました。朝早く起きた組はルーブルに行っていたようなのですが、僕の部屋は二人とも疲れが溜まっていたのかかなり遅くまでダラダラしていたので10時過ぎにホテルをチェックアウトして近場を回りました。

f:id:koukyo1213:20181025153546j:plain
運河

僕は部屋が一緒だったM2の人とその日は行動していました。その人はKaggleエキスパートだったので一緒にKaggleなどについて話しながらあちこちを回りました。最初に行ったのは近くにある運河です。上の写真だとなかなか綺麗に見えますが実は結構緑がかっていてややパリの印象から外れていました。

f:id:koukyo1213:20181025154008j:plain

その後、ピカソ美術館に向かって歩きました。ピカソ美術館はそこそこ広く全部は見切れなかったです。

f:id:koukyo1213:20181025154126j:plain

f:id:koukyo1213:20181025154136j:plainf:id:koukyo1213:20181025154146j:plainf:id:koukyo1213:20181025154152j:plain
ピカソ美術館

その後、空港に向かい、ドイツのテーゲル空港まで行きました。この日は基本的に移動が多い日でそのくらいしかしませんでした。

f:id:koukyo1213:20181025154334j:plain
空港にて遊ぶ人たち

続きはベルリン編で・・・

GCI優秀者研修旅行【ロンドン編】

はじめに

この記事はGCI優秀者研修旅行のロンドン編です。

GCI優秀者研修旅行とはなんぞや?という方はこちらをご覧ください。

出発 - ロンドン到着

成田

今回の旅行は2018年9月24日から10月1日のスケジュールでした。初日はほぼ飛行機で移動だけだったのですが、朝成田空港に集まるところから始まりました。 飛行機の搭乗の時間が11時だったので全体の集合は9時だったのですが、僕はクレカがお亡くなりになっていたので現金を換金したり、保険に入ったりとやることが多かったので 朝8時過ぎには空港についていました。

f:id:koukyo1213:20181003134828j:plain
成田出発

ヘルシンキ

今回はフィンランド経由でイギリスに行ったので途中のヘルシンキで乗り継ぎがありました。ヘルシンキは森の中に転々と街があるといった感じの自然豊かな都市でした。

f:id:koukyo1213:20181003135112j:plain
ヘルシンキの街並み

ヘルシンキ空港の中では待ち時間が少しあったのでみんなで近くのお店でビールを飲みました。

f:id:koukyo1213:20181003135556j:plain
みんなでビール

その後、乗り継いだ飛行機でヒースロー空港に向かいました。ヒースロー空港まではあまりかかりませんでした。ロンドン着が大体現地時間の18:00ごろだったと思います。

ホテル到着

その後、空港でタクシーを捕まえ、ロンドン市内のホテルに向かいました。

f:id:koukyo1213:20181003140012j:plainf:id:koukyo1213:20181003140125j:plain
ホテルの様子

川上さんとディナー

その後、St.Pancras駅構内にあるブリティッシュパブで、現在博士課程に在籍しながらDeepMindインターンをしていらっしゃる松尾研修士卒の川上さんと会食に行きました。

f:id:koukyo1213:20181003140426j:plainf:id:koukyo1213:20181003140437j:plain
ブリティッシュパブの料理

僕はフィッシュ&チップスを頼みましたが、なかなか量があって食べ応えがありました。イギリスの料理はマズイことに定評がありますが、意外なことに美味しかったです。松尾先生いわく最近料理のレベルが上がってきているんだとか。ただし、グリーンピース山盛り(ミント味)、お前だけは許さない・・・

川上さんとの会食ではDeepMind社について色々と聞くことができました。

DeepMind社は会社としては、研究開発組織の色合いがかなり強いらしく、川上さんも会社の利益に繋がるかどうかなどを一切考えることなく研究に専念できているとのことでした。話を聞いただけの印象ですが、大学にも雰囲気は近いのだろうかと感じました。

今回の旅行にはPreferred Networks(PFN)のサマーインターンに参加していた方も二人いたのですが、その人たちの話も聞いたところPFNも雰囲気としてはかなり近いとのことでした。

個人的には、DeepMindは巨大組織のため社員は数千人いるという話は意外でした。その中でも様々なチームがあり活発に動いているそうです。また、論文になるかどうかということを考えながら研究しているわけではないので、論文にはならなさそうな研究も沢山あり、カンファレンスなどでDeepMindとして現れる研究はその中のごく一部なのだそうです。

会社の利益になるかどうかを考えずに研究に専念できる、という環境を維持し続けられることについても質問が上がっていましたが、どうしてそんなことが可能なのかという明確な回答は川上さんにもわからないとのことでした。

その後、近くのKings Cross駅を見に行きました。かの有名な9と3/4番線も見てきました。

f:id:koukyo1213:20181003142003j:plainf:id:koukyo1213:20181003142126j:plainf:id:koukyo1213:20181003142144j:plain
夜のKings Cross

2日目 ATI - RCA - Babylon

朝食と朝の散歩

f:id:koukyo1213:20181003143543j:plain
朝食
朝食がビュッフェ形式だったので欲張って取り過ぎたら食べ切るのが大変でした。向こうの食事は全体的に塩味が強い印象を受けました。

f:id:koukyo1213:20181003143825j:plain
ロンドンの静閑な住宅街
その後、朝のロンドンを散歩しました。ロンドンはこの時期はもう朝は寒いようで、みんな冬服になっていました。

ロンドンは観光地などでは全然ないような場所も全てレンガづくりの街並みが広がっていて街全体としての統一感が非常に美しい都市でした。大通りを歩いていても楽しいですが、一本隣の道に入って地元の雰囲気を味わうのもなかなかよかったです。

f:id:koukyo1213:20181003144012j:plain
浅草 in London
f:id:koukyo1213:20181003143923j:plain
ホテルからの景色

Alan Turing Institute訪問

その後、研修旅行最初の訪問活動としてAlan Turing Institute(ATI)に行きました。ATIは、イギリスの大学が共同で立ち上げたAIの研究機関で発足は2015年とのことでした。

ATIBritish Libraryの一室にオフィスがあり、その前には名前にもあるAlan Turingにちなんで第二次世界大戦の時に使われたエニグマ暗号機が飾られていました。

f:id:koukyo1213:20181003151532j:plain
エニグマ

ATIでは、組織の沿革についての話と、Ph.Dの方が現在研究している内容についての話を伺うことができました。

ATIはAI研究の中でも基礎研究や共同研究に注力する組織で、事業としての展開やユースケースケーススタディなどは行わないそうです。その意味でイギリスのAI研究を下支えする研究機関という立ち位置を担っているという印象を受けました。

その上でATIが初期の目標として掲げているのは、

  • Safe and Ethical A.I.
  • Robotics

とのことでした。Safe and Ethical A.I.というのは研究室でもよく話題に上がる倫理的なAI、説明可能なAIといったAIの課題として話題になっている事柄とかなり近いと感じました。また、Roboticsは松尾先生の講演の中でもあった、機会が目を持つようになったことで今までできなかった領域における自動化が促進される、といった話と近いのかなと思いました。

ATIがSafe and Ethical A.I.を実現するにあたって重要としている事柄は

  • Fairness
  • Transparency
  • Privacy
  • Security
  • Robustness
  • Control

など多岐に渡っていたのですが、その中でもこの時はFairnessに関する取り組みを少しお話していただけました。

ATIが取り組んでいる研究の一つ、Counterfactual Fairness[1]という話をざっくりと聞かせていただきました。非常に大雑把な説明をすると、人間の意思決定を任せるようなシステムにおいて、公平性が担保されているかどうかを確認する手法で、反実仮想的な問いかけをシステムに対して繰り返し結果の出力の変化を観測する方法です。例をあげると、ローンの貸付の審査を行う自動化システムにおいて、ある男性が貸付をするという結果を得たとして、もし仮にその男性のapplicationのうち性別に関する部分だけを女性に変化させたとして結果が貸付をしない、というものになったとしたらそのシステムは何らかの差別的な学習をしてしまっている、と判断する、というようなことだそうです。

この説明は誤りがあるかもしれないので、詳しくは論文を参照していただければ、と思います。

その後、ATIPh.Dとして研究を行なっているAlvaroさんから、交通流の最適化に関する研究についてお話していただきました。 Alvaroさんは航空宇宙の出身で数学の博士を取った後、現在はATIPh.Dとして研究活動を行なっている、という方でした。

Alvaroさんは、ATIで都市交通に関してデータ探索やシミュレーションのテストシナリオを作成するツールの開発や、交通システムに対する変更の影響をシミュレーションなどを駆使して評価するような研究を行なっているとのことでした。交通システムなどの巨大で複雑なシステムにおいてはエージェントの行動がシステムの挙動を変更してしまうような現象が起こる(Knock on Effectと表現していました)ため、適切に影響を評価することは現在になっても難しいとのことでした。

今回はそのAlvaroさんの研究活動の中でも、交通信号の表示の仕組みを強化学習を使って最適化し、信号待ちで止められる車の台数を低減する、という研究に関して発表を聞きました。交通信号のアルゴリズムは、最適化が難しく全体として待ち時間を最小化するような解を得るためには個々の信号の最適化ではうまくいかない、という研究がこれまでになされてきたようです。Alvaroさんはこれに対し、強化学習のアプローチを用いてシミュレータにおいては改善することを確かめたとのことでした。今後は実データでの検証なども視野に入れながら研究を進めるとのことです。

Royal College of Art訪問

その後、Royal College of Art(RCA)を訪問しました。RCAはデザインシンキングなどで有名な大学でした。今回は、たまたまRCAに9月から短期の留学をしている僕の高校同期の磯部くんがRCAツアーのアレンジをしてくれました。

RCAは三つキャンパスがあるそうなのですが、今回はその中でもWhite City Campusを案内していただきました。RCAは、異なる分野、異なるバックグラウンドをもつもの同士が協調することによる可能性を強く信じている大学とのことで、ワーキングスペースの配置なども異なる分野に強みをもつもの同士が隣り合うようにするなどしているとのことでした。

また、学生が発表や自己の作品などを発信する機会を非常に多く取っているとのことでした。

f:id:koukyo1213:20181011175326j:plainf:id:koukyo1213:20181011175312j:plain
RCAで行われた展示会の様子

このような展示会のためのスペースや学生同士が話し合うためのスペースなどがあちこちにあり、空間設計に非常に気を使っている印象を受けました。東大の近辺にもコワーキングスペースのようなものは近年増えていますが、それよりもはるかに多くのワーキングスペースを設けてありました。また、White City Campus自体もそうですし、その隣にある建物もBBCが以前は所有していたとのことでそこにあったスタジオのような設備も使えたりと制作活動に専念できそうな環境が揃っていました。キャンパス内の広場のようなところには、テーブルゲーム台やチェスなどがおいてあり、学生同士が遊んでいました。また、たまに屋外の広場に巨大なディスプレイが出されていることがあるそうで、みんなでサッカーを見たりするそうです。

近くにはEU内最大のショッピングモールがあったり、一室を買うとしたら100万ポンドは下らないだろうというマンション?などがあり賑やかな地区という印象を受けました。

f:id:koukyo1213:20181011180148j:plainf:id:koukyo1213:20181011180154j:plain その後20分ほど歩いて、2日前までやっていたというLondon Design Festivalの会場の一つを見学しました。 f:id:koukyo1213:20181011180646j:plainf:id:koukyo1213:20181011180702j:plain

この場所は、バイオデザインの展覧会場だったのことで、プレハブの一つ一つがバイオデザインの研究室なのだそうです。アイデアはあってもお金や研究環境へのアクセスがない人がかなりの低額でプレハブの研究スペースを借りて独自の研究をすることができるようにしているとのことで研究を支援する環境が整っている街なんだ、という印象を受けました。

その後、案内などもしてくれた磯部くんと個人的に留学についてや今後の身の振り方などについて濃い話をした後、ロンドンでの最後の訪問先のBabylon Healthに向かいました。

Babylon Health

Babylon Healthは医療系AIのスタートアップで創業から数年しか経っていないにも関わらず、海外展開をしていたり400人以上のスタッフを抱えていたりと非常に勢いを感じるスタートアップでした。

Babylonの掲げる医療におけるAIの導入は、病院における医師のサポートや日々の生活における病気予防など多岐にわたるそうで医療という分野で様々に手を広げているようでした。

この時の訪問では、自閉症の早期発見や患者の感じる痛みの検知などに使われる顔画像からの感情分析の話をしてもらいました。 顔画像からの感情分析のタスクは昔からあるタスクで、僕も研究室の大先輩の博士論文などで見かけたことがありますが、CNNによる画像処理タスクの大幅性能改善により新たなブレイクスルーを迎えたそうです。このタスクは顔画像の抽出と画像内の顔の感情分析の二つに大きく分けられます。

顔画像の抽出も現在の最新の成果では、98%以上の精度で抽出できるようになっており、100人以上の顔が写っているような写真からほぼ誤りなく顔を抽出できている様子などは非常に衝撃的でした。 また、感情分析のタスクでは、各感情の間に位置するような微妙な表情の分析が難しいとのことだったのですが、これをAction Unitという人間の顔で変化しやすい点を事前知識として定義するという比較的古典的な手法と各Action Unitがどのような値を取っているかという関係をグラフとして扱ったMarcov Random Fieldの学習として解くことで大幅な性能改善を行なったとのことでした。

仔細は論文を確認した方がいいのですが、残念ながら論文のタイトルを忘れてしまったのでまた後ほど・・・

食事

その後、RCAの紹介のアレンジメントをしてくれた磯部くんと会食をしました。 f:id:koukyo1213:20181011183012j:plainf:id:koukyo1213:20181011183018j:plain

肉料理にはハズレはなく、食事を楽しむことができました。その後、近くのラーメン屋さんに松尾先生といきましたが、驚いたことに日本のラーメン屋と比べてもまったく遜色ないくらい美味しかったです。松尾先生はどうやら食事に関しては一家言あるようで、旅行中の他の機会にもラーメン屋さんにご一緒させていただきました。

3日目 パリへ移動

3日目は朝早くに起きてパリへユーロスターで移動しました。

f:id:koukyo1213:20181011183652j:plain
St.Pancras
f:id:koukyo1213:20181011183645j:plain
Platform
f:id:koukyo1213:20181011183657j:plain
Eurostar
f:id:koukyo1213:20181011183701j:plain
フランスの田舎

基本的にユーロスターから見られる眺めはずっと広大な平原とところどころある林と、ポツポツと見える町でした。牧歌的な雰囲気がとても気に入りました。

続きはパリ編で・・・

参考文献

[1] Kusner, M. J., Loftus, J., Russell, C., & Silva, R. (2017). Counterfactual fairness. In Advances in Neural Information Processing Systems (pp. 4066-4076).

GCI優秀者研修旅行に行ってきました

はじめに

今日は、9/24-10/1の日程でGCIの優秀修了者が招待される欧州研修旅行に行ってきた記録を残しておきたいと思います。今回のGCIは第5回ですがこの研修旅行は第1回の頃から行っているものとのことでした。年によって行く場所が違うらしいですが、今年は欧州研修旅行として、ロンドン・パリ・ベルリンに行ってきました。

 

非常に内容が濃かったので、ロンドン編、パリ編、ベルリン編の三つに分けてこれから書いていこうと思います。

GCIとは

本編を書くまえにGCIの説明をしておこうと思います。

GCIとは、東京大学 松尾研究室が主催している寄附講座で正式名称は「東京大学グローバル消費インテリジェンス寄付講座」と言うそうです。内容としては、PythonSQLなどからScipyやPandasなどの科学技術計算には欠かせないツールの使い方、そしてマーケティング的思考や分析の手法など幅広い内容を取り扱う、データサイエンスの入り口のような授業です。

 

学部1年生から博士課程の学生、また社会人に向けても門戸を開いており、単位は出ないにも関わらず例年定員を大きく上回る受講希望が届けられているとのことです。

 

今年は、授業内にKaggleのようなデータ分析コンペが取り入れられたこともあり、楽しんで参加することができました。

優秀修了者の条件

GCIの修了条件は、毎回の授業で出される課題を全て提出していること、授業を4回以上欠席していないこと、でした。その上で、今回の優秀修了者として選ばれたのは、1回でも授業内のデータ分析コンペで3位以内に入賞しているか、最終課題で優秀な成績を納めたと認定されたか、と言うことで選ばれていて全部で10人程度だったかと思います。

ロンドン編

koukyo1213.hatenablog.com

パリ編

koukyo1213.hatenablog.com

ベルリン編

近日公開予定です。

VOYAGE GROUPのTreasureインターンに参加してきました。

f:id:koukyo1213:20180903170600j:plain

はじめに

8月の半ばから終わりまでの三週間にVOYAGE GROUPのTreasureインターンに参加してきました。 非常に内容が濃く、ためになるインターンだったのでここに思い出を残しておきたいと思います。

応募から開始まで

そもそも、僕はVOYAGE GROUPという会社を今年の5月くらいまで知りませんでした。というか5月の段階ではDeNAクックパッドが IT企業ってことも知らない状態で、IT就活なんか興味あるけどようわからん状態です。

そんななか、予備校で浪人していた時代の友達から「本郷周辺でただで焼き肉食べられるイベントあるんだけど、来ない?」 という、選択肢があってないような話が飛んできてすぐに応募しました。だってタダ焼き肉だよ?

応募にあたってサポーターズに登録する必要があったのですが、タダ焼き肉のためとあればなんのその、話が回ってきてから20分で 登録を済ませました。

当日の焼き肉は本郷三丁目から歩いて5分くらいのところにある房屋でした。学生にはちょっと手が出づらいくらいの価格帯(¥4000~)のところなのでなかなかいいものが食べられました。写真を撮り忘れていてここに貼れないのが残念・・・。

このイベント、実のところタダ焼き肉をなんかおごってもらえるイベントというわけではなくて、タダ焼き肉を食べながらIT企業のエンジニアの人と話しながらインターンの紹介をされたり自分の人生相談をさせてもらったりするイベントです。毎年やっている?っぽいのでオススメ。

その日来ていたのはDeNAの人とVOYAGE GROUPの人、そしてサポーターズのコーディネータの人でした。なので僕がはじめてVOYAGE GROUPを認知したのはこの時です。DeNAの人から無限にDeNAについて説明を聞いたり VOYAGEの人にそもそもVOYAGEって何をやっている会社なのかという説明を受けたり、サポーターズの人からJapanese Traditional Big Companyではクリアファイルを買うのにもはんこが5つと一週間が必要なことを聞いたりとなかなかおもしろかったです。

このときにインターンの説明も受けたわけですが、このときの興味はまだ殆ど無かったです。でも折角焼き肉おごってもらったし応募はしてみようと思い結局DeNAとVOYAGE GROUPの両方に応募しました。結果としてDeNAは経験不足ということで面接に落ちましたが、VOYAGE GROUPの方は通ることができました。面接のことは書いていいのかわからないので濁しておきますがコードを書いたりといった技術試験みたいなのはなかったです。多分GitHubとかは覗いているんじゃないかと思いましたが技術力を測っている様子はあまりなく、どちらかといえばチームとしての協調行動ができるのか、みたいな部分を見ているんじゃないかと思いました、しらんけど。

その後、8月の頭に事前課題が出されて8月13日からのインターンに備えて少し勉強をしました。事前課題は、インターンで用いるGolangの基本的な文法についてだったりDB設計(第三正規化できるかな?みたいな)とか、セキュリティの基礎とかAPIの叩き方とか。セキュリティ関連の話なんかは知らないことが多くて結構勉強になりました。

講義の流れ

Treasureは、講義が1週間半強あり、残りの1週間半弱がチーム開発を行うというインターンです。講義では様々なことを学ぶことができました。

はじめの二日間はGoを使ったWebアプリケーションの作成についての講義でした。Goに関してはインターン参加が決まってから少し勉強した程度でしたがなんとかなりました。 ちょっと前にC言語をずっと触っていた経験が生きたような気もしました。スライス、マップくらいは分かっておいたほうが良かったかもしれないですが調べればなんとかなるというスタイルでも 問題なさそうでした。

三日目がフロントエンド講義だったのですが、ここのあたりが自分的には一番きつかったです。というのも、今まで自分が触れたことのあるフロントエンドの技術はjQueryレベルだったところに いきなりReact + Reduxみたいな話が飛んできて正直この日習った内容をその日のうちに咀嚼し切ることはできませんでした。でもこの時習った内容が後述する中間課題では大活躍したので 結果としてはかなりためになる講義でした。

4日目はWebAPIの講義でした。今までの自分の経験では、JSONを返すAPIを作ったことはなかったので新鮮な経験でした。モダンなWeb開発の「標準」を知りたいと思って参加した、というのが 結構大きな動機としてあったのでこの時点で満足度100%くらいです。自分チョロい。

ちなみにこのときの内容がバズってました笑。

5日目から土日をはさんで月曜(6日目)の朝まで、中間課題というものが出ていました。結構自由に作れる感じだったので僕はマインドマップを書くアプリケーションに挑戦しました。この時に、これまでの講義資料がめちゃくちゃ役立ちました。 構成としてはバックエンドにMySQL+Goを使い、フロント側はReact + Redux + Canvasという構成にしました。講義で習ったことをできるだけ使おうと今まで触れたことのない技術ばかりでしたが挑戦してみた所レビューでほめてもらえました(レビューに関しては後述します)。結構作るのが楽しくて愛着も出てきたのでフロント側だけで動く部分だけでも完成させてgithub.ioにあげてみようかと思います。

f:id:koukyo1213:20180903161225p:plain

二周目はセキュリティの話やデータベース設計の話、アイデアソンなどがあり2周目の最後にチーム開発が幕開けました。

チーム開発

チーム開発は5人ずつのチームに分かれて開発するというものでした。このチーム開発、すごいのが各チームに3~4人のメンターがつくこと。僕達のチームは4人のメンターさんたちに恵まれたチームでした。

チーム開発は基本的に何を作っても良さそうな(HTTPを使っている、みたいな条件はいくつか有ります)感じでしたが、この時にアイデアソンの時に習った方法で自分たちの作りたいプロダクトについて悩みに悩みました。正直なところ、僕は一日で決まると思っていたのですが、最終的にアイデアが固まるまでに3日かかりました。他のチームも似たような感じでしたが、これも社員の方からみると上手く行っている方、らしいです。アイデア出しは難しい。

僕達のチームは作りたいプロダクトの性質からしてモバイルアプリがふさわしい感じだったのでiOSアプリケーションとして開発を行いました。例年iOSアプリケーションは何チームかあるとのことでしたが、今年は僕達のチームだけでした。僕はSwiftを書いたこともなければMacも持っていなかったのでバックエンド側でひたすらAPIを作る人になっていました。自分たちのプロダクトはクライアントサイドが結構重そうだったので開発中なんども手伝いたくても手伝えない歯がゆさを感じました。もちろんコードを書くだけが手伝う方法ではないのですが、絶対的に仕事量が偏っている中ででも自分が何もできないのはもどかしく、Swift書けるようになりたい!と何度も思いました。

最終的にはなんとか動くものもできたのでかなり満足はしていますが、動くことを優先しすぎて手が回りきらなかった所もいろいろあるのでインターンが終わっても開発を継続したい気持ちでいっぱいです。

インターンの流れはこんな感じなのですが、待遇?というか環境がすごかったので書いておきます。

環境などなど

参加者

参加者のレベルは高い方なのかな、と思いました。といっても他のインターンに行っていないので比べるすべがないのですが、みんな何かしらの形でプログラミングでプロダクトを作った経験があるような人たちでした。 講義中も結構色々な面で説明が端折られることも多かったのですが難なくついていけている感じでした。Web系の人間が多いのかな、と思っていたのですが意外とそうでもなくてSwiftばっかり書いています、みたいな人や 普段はゲームサークルでC++を書いています、みたいな人もいてWeb関連のことをやっている人は6~7割くらいという印象でした。

講師陣・サポーター陣

このインターンですごかったことの一つに豪華講師陣が挙げられます。メイン講師のすずけんさんは、VOYAGE GROUPの中でも最高ランク(社内評価制度というものがあるそうです)の方なのですが、その方がフルコミットしてくださる、みたいな無茶苦茶ぶりでした。社内の主戦力を三週間も投入し続けるという本気度合いをひしひしと感じました。 他の講師の方もさもありなん。

後半のチーム開発でもつきっきりでエンジニア2人と営業・人事の方を1~2付けたりとかなり豪華なサポート体制でした。また、中間課題に関してはすずけんさんが3日かけてレビューをしてくださるという高待遇っぷりでした。サポーターの方も困った時に聞けば手助けをしてくださるのですが、こちらの成長を考えてただ答えを教えるわけではなく、自分で考えて答えにたどり着けるようにしてくださるような教え方をしてくださりとても自分のためになりました。なんかこう書いているとだんだん胡散臭さが出てきますが全部本当のことなのでしょうがない。

3時のおやつと飯事情

面白かったのは、講義期間中は毎日3時のおやつの時間があったことです。大体毎日驚かせようと腕によりをかけた作品?が持ち込まれていました。

f:id:koukyo1213:20180903165231j:plain

かき氷だったりうまい棒1340本だったりと毎日この時間はワクワクさせられました。 また、社内にAJITOというバー?があり18:30以降はお酒をただで飲めるという爆アド体験もしました。他にもご飯関連では無限に語ることがあるのですが、あまりにありすぎて書ききれないのでTwitterで#voyage_internで検索をかけてみるといろいろと面白いものが見つかると思います。

振り返ってみて

色々書いてみましたが、ここには書ききれないことが満載です。とにかく最高なインターンなので抜群にオススメです。

キャリア形成のお話

昨日、ちょっと面白い方と面談してきたのでメモ。

機密保持うんたらの話とかなかったのでどこまで書いていいものか分からないので、ちょっとぼやかして書きます。

成り行き

某HRテックの人とfbでたまに連絡をしていて、インターンには時期的に行けないが御社のデータ分析の取り組みに興味がある、と伝えたら設定していただきました。

面談してくださったエンジニア

某HRテックではデータ分析基盤を作ってたり、人事をやってみたり、休日に完全食を作ってる企業のCTOをしていたり、データ基盤のOSSのコントリビュータだったりと、とにかく色々なスキルをお持ちの方でした。

その上自分とは6つしか離れていないらしい。正直6年経ってもその人と同じ土俵に立てているのかわからないです。

面談のながれ

  1. 最初ににIT業界を取り巻くながれの概観を教えていただきました。

Webの世界では最初は同じエンジニアが、バックエンドもフロントエンドもインフラもひっくるめてやっていたこと、段々と切り分けができてきて今ではバックエンドはAPIを用意するだけでよくて、フロントエンドはAPIのエンドポイントさえあれば、JSをごにょごにょ書いていれば大丈夫なこと、その様子はフレームワークの興盛にも現れていること、と言ったざっくりとした話をしてもらいました。

また、データ分析の世界でも今は分析者がWebのほうでもAPIを作らざるを得ない状況にあること、これから分業が進んで、分析者はデータのI/Oの部分だけ作ればよくなるようになっていくだろうという話をしていただきました。

そして最後に、そういった状況を踏まえてどのような生き方をするのがいいのか、みたいな話になりました。

大分業時代の生き方

その方が言っていた面白い話、というのは大分業時代にあって希少かつ重要になるのは分業された仕事を糊付けするような仕事だ、という話でした。そして、そのような仕事は何か1つの分野で高い専門性を誇るような人よりも様々な分野を広く浅く経験してきた人間、とも言っていました。

正直今まで専門性の無さにちょっとした絶望感を持っていたのもあってなかなか深く心に残る言葉でした。

しばらくはその意味を咀嚼しながら自分のキャリア形成を見つめてみようと思います(そもそもキャリア形成を意識しなければいけない、というのがちょっと固定観念のような気もしますけど)

こうきょの日記(限定版)について

事情があってオープンにできないような記事をまとめるためのブログを開設しました。

Twitterのアカウントに対して閲覧を許可する、などが出来ますので見たい人は連絡をください。

個人的な知り合いなどには公開しようと思います。

今のところ某コンペで2位になった話を載せています。