こんにちは。コンピューターの会社ですが、アプリケーションを機械学習に統一すると言う方向性を掲げたため、これまで以上にデータを扱いモデル扱う仕事が増えてきました。そうした中で効率的に教育やチュートリアル、採用基準を決める上で、データサイエンスの入門として様々な教材があると思いますが、今後の発展性を考えてKaggleを始めてみました。 本サービスに関しては、様々な説明サイトがありますので、端折りますが、私たちの仕事の中でもこうしたKaggleで利用するテクニックは実務の中でも多くなっていきます。特に私たちの場合、量子計算と呼ばれる分野に注力しているため、 本当はなかなかそこまで実用的な問題はできませんし、主に扱うのはモデルの部分に相当します。
しかし最近ではGPUを利用した量子コンピューティングプラットフォームの活用により実問題を大規模に解く機会が増えてきました。私たちが量子計算で扱う主なモデルは、テンソルネットワークと呼ばれる一次元や二次元にモデルを簡略化したものに、量子もつれを導入した形になっています。 そうした、そのネットワークは、物理学で利用されるだけでなく、機械学習分野においても、そのテンソルの扱いにおいて、様々な低ランク近似のモデルが存在し、一部量子計算と共通化することができています。 そのため、最近量子計算の分野において成果を出したい企業とこうしたテンソルの扱いを分野を広げて導入し、実際のニューラルネットワークと結合することにより多くの成果を出すことができています。
昨今のGPUの発展によりこうした量子計算と共通化されたニューラルネットワークのモデルの学習範囲は大変広がっており、従来型のニューラルネットワークだけではなく、トランスフォーマーなどを導入したモデルも増えています。そんな中パラメータの最適化や低ランク近似と呼ばれるパラメータを扱うモデルは増えており、私たちの量子もつれを導入したネットワークモデルを 実問題に応用できるケースが増えてきました。
そこで量子計算から入った研究者やエンジニアはそう多くはデータサイエンスに明るいわけではありません。これまで私たちは量子計算と呼ばれる量子回路を使ってどのように計算を高速化できるか、そして機械学習や計算など、様々な計算分野においてどのように活用できるかを模索してきました。そうした模索の大部分は量子回路と呼ばれるモデル部分に特化しており入力出力値等は大きくは考えません。量子計算においては入力は回転角もしくは振幅エンコーディング。そして出力は多くはサンプリングや期待値に固定化されています。
その中、少しでもデータサイエンスの知識とテクニックを活用し、実問題の精度や実用性を高めるためには、こうした新しい分野等のマッチングが必要です。この中ではKaggleを利用することによって、弊社ではデータサイエンスの波を大きく取り入れることができるのではないかと考え、自分自身ではじめてみました。 実際私たちも普段から機械学習関連のプロジェクトを行っており、データの前処理や後処理モデルの精度の検証など多くやって参りました。そんな中、時系列データや画像データなどを扱う際には、やはり既存のこうしたデータサイエンスの技術が必要となっていたことがわかっています。今回よりそれらを体系的に学ぶことにより間口を広げ、今後AI技術、そして量子技術の発展とともに非常にスムースにモデル開発や技術開発ができるようにと考えています。
さて、今回Kaggleでまずとりかかったのはいきなりコンテストではなくチュートリアルから始めました。チュートリアルは多くのノートブックから構成され、説明とエクササイズから構成されています。自分自身全くチュートリアルをやったことなかったので、全てやってみようと思い1週間で完了させようと考えました。
それは全く無謀な挑戦でした。若ければもう少し体力があったので、1週間で終わらせられたかもしれませんが、45過ぎのおじさんにはちょっと厳しかったです。ですので、歳をとった人には少しずつチュートリアルをこなしていくと言う必要があるかなと思いました。自分自身は前の方から順番に行っていって、あまりにも辛いので、つまみ食いをしながらいろんなチュートリアルを並行して行いました。 最初のほうのチュートリアルは、かなり基本的なプログラミング、やっぱりその使い方など大事なところがあります。量子コンピューティングにとってもほとんどのプログラミングはPythonで完結しますので、こうした角度でPythonを学び、プログラミングの方法を学ぶと言う事は、量子計算そのものにとってもプラスになると考えています。
イントロとしては、機械学習を扱うモデルがいくつかありました。最初に非常にわかりやすかったのは、 最初に決定木モデルを利用した機械学習の利用手順になっています。量子計算を行う私たちの場合にはこうした決定モデルを使う事はなく、基本的にはニューラルネットワークモデルと呼ばれるもの量子回路と重ね合わせて使う方法ですので、この後の深層学習入門が非常にわかりやすかったと思います。実際のレイヤーの中にテンソルネットワークを利用したモデルを差し込むことがありますので、こうしたツールの利用は普段から行っていたのですが、1から体系的に学ぶと言うのは非常に重要だなと感じました。
https://www.kaggle.com/learn/intro-to-machine-learning
https://www.kaggle.com/learn/intro-to-deep-learning
データやモデルの扱い方だけでなく、過学習等にも触れていただき、そしてドロップアウトやバッチノーマライゼーションなど基本的なところを学べて大変良かったと思います。
よかったのがやはりpandsの使い方で、こうしたデータの処理に関して非常に多くの効率化を図る余地があると思いますので、一般的にモデルを触ってる時にはデータが揃っている場合も多いのですが、やはり今後実データを触っていくに際して、こうした処理の細かいところまで勉強しておくと言う事は非常に大事だと感じました。
https://www.kaggle.com/learn/pandas
我々も普段の業務の中ではレポートやベンチマークが非常に増えています。 特に量子計算を利用する場合、モデルの精度や性能を測ることが非常に多いです。そのためデータの可視化というのは非常に重要となっていて、こうしたものを体系的に学べると言うコースも大変助かります。
https://www.kaggle.com/learn/data-visualization
特徴量エンジニアリングに関しては、特に現在すぐに必要と言うわけではありませんが、今後より発展してモデル以外の評価が入る場合、全体の評価を上げるためにはこうした特エンジニアリングが出てくると思いますので、将来のためにのがいいかなと思いました。
https://www.kaggle.com/learn/feature-engineering
1週間では後は特徴的なところはちょっと気になった。時系列データを勉強してきました。仕事でも時系列を扱う事は多く、こうしたものを学ぶというのは、今後の教育のためにも大変重要であると思います。時系列データの特徴を把握しながら、プロジェクトごとの知識を組み合わせ、そしてもしかしたらモデルの精度や性能はそこまで影響しないのかもしれませんが、全体的なフローの中でこうしたデータをどう扱うかと言うのを仕事が始まってから覚えるのではなく、事前に準備した上でスムーズに様々な評価に入っていけるのは非常に時間の効率が良くなります。
https://www.kaggle.com/learn/time-series
ここまで 自分自身で初めてKaggleのイントロのチュートリアルを始めてみたところ、やはりかなり時間がかかりました。目安時間として1つのチュートリアルあたり4時間から5時間というのが多かった気がします。そんな中1週間で全て終わらせようとすると17個やる必要がありますが、そうしたものを全て終わらせるためにはかなりの時間がかかります。そのため1週間と言う目標はかなりアグレッシブで向こう見ずな目標だったと思います。昔の若い時はもうちょっと行きましたが、今ではいけません。
と言うことで、当初の目標である1週間の間にすべての中から終わらせると言う事はおじさんにはできませんでしたが、火曜日から2週目に突入しますので、2週目としてこれまで気になって残していた部分を勉強しながらも残っている部分を並行して進めると言うことによって、効率的に学習を進めたいと思います。以上です。