ゼロから最先端のAIを理解する方法


#こんにちは
　[Newspicks](https://newspicks.com)でエンジニアインターンをしている、Nguyen Hoangです。普段は、奈良先端科学技術大学院大学(Naist)で自然言語処理の研究をしている大学院生です。
　記事で書かれている手順に従えば、ITのことを知らない方でも、AIのプログラムを実行できますので、非エンジニアの方でもAIを体験できます。Kaggleというサービスに登録し、Enterを押すだけで、AIプログラムの実行できます。記事の中でより詳しい内容を書いて行きます。
　また、この記事は私が普段の研究でよく使う学習テクニックについて書いていきます。「AIとは何か」を理解した方は入門を飛ばして、中級から読んで下さい。
　何かご指摘を頂けると嬉しく思います。
　
#入門
### AIとは？
　AI技術を詳しく知らない人だと、人工知能といえば、アニメやSF映画に出てくるようなものを想像するでしょう。しかし、そのものはまだ遠いように思います。現在研究されているAI技術は主に次の３つの分野があります。
**1. 自然言語処理**
　自然言語処理技術は、人間が思考に使っている言葉を研究する分野です。応用例は、Google翻訳、Lineチャットボット、Amazon Echo、Siri等です。いわゆる、人間の思考を模倣する技術です。
**2. 画像認識**
　画像認識技術は、人間が視覚で捉えている世界をコンピュータに認識させる技術です。例えば、画像を入力すれば、犬、猫だと認識する技術です。
**3. データマイニング**
　自然言語処理、画像認識は、問題がすでに固定さているが、データマイニングは実世界にある問題に対して、使える人工知能技術があればなんでも使うものです。

#AIを学習する方法
　学習方法は大きく分けて２つあります。トップダウンとボトムアップです。効率よく、素早く学習するにはトップダウンな方法をお勧めします。
###1.Top-down
　トップダウンな学習法は、実戦から入って詳細を追って学習していく方法です。実現したい事を決めて、その為には必要な知識をその都度学習していくものです。例えば、「将来の売り上げを予測する」には、[「最小二乗法」](https://qiita.com/ishizakiiii/items/72be4ce16a10f97d6183)、[「線形回帰分析」](https://pythondatascience.plavox.info/scikit-learn/線形回帰)を使うことができます。最小二乗法と回帰分析のサンプルコードを調べてきて、持ち前のデータを分析することができます。その時に、わからない事が出てきたら、逐次に調べたらいい訳です。
###2.Bottom-up
　ボトムアップな学習法は、線形代数、統計確率、機械学習の基本的なアルゴリズム、ディープラーニングなどの基礎から学んでいく方法ですが、基礎を学習する時に様々な疑問が出てきてその疑問を解決するだけで時間がロスしていくのが殆どだと思います。しかも、それが解決したい問題に関係しているとは限らない。つまり、無駄な作業が多く発生してしまう訳です。時間に余裕があってじっくり勉強を楽しみたい場合は、ボトムアップな学習法がいいと思いますが、仕事上では向いていないと思います。
###3.結論
　効率より学習して応用していくには、トップダウンな学習方法がいいという事ですので、この記事ではトップダウン的な学習方法を取ります。具体的に、サンプルコードを提示して、皆さんにコードを実行してもらって、分からない概念、技術などがあればそこで調べるのは、AIを学習する一番速い方法です。
#AI最先端への最短ロードマップ
　方法は色々ありますが、ここでは私がよく使うコツを書きたいと思います。下にその例も書いています。
**1.AIを使う場面を想定する**
　目的意識を持って調べると、必要な技術を早く探せます。
　例：スパムコメントを検出したい
**2.使用したい場面の技術分野を特定**
　Webエンジニアがよく関わるAI技術は、大きく分けて次の３つのどれかに分類されます。自然言語処理か、画像認識か、データマイニングです。
　例：スパムコメントは、テキストを扱うから自然言語処理になります。
**3.その分野の国際会議の論文をサーベイ　（応用）**
　このステップでは、使用する技術を確認し、その技術の現状を把握します。
　どうサーベイするかは、[このサイト](http://lafrenze.hatenablog.com/entry/2015/08/04/120205)から参考できます。
　自然言語処理、画像認識、データマイニングの有名な国際会議から論文をサーベイする。自然言語処理のトップカンファレンスはACL、EMNLPというものがあり、画像認識のトップカンファレンスはCVPR、ICCVで、データマイニングはKDD、ICDEです。AI周りの国際会議の論文はほとんど無料で公開されているので、誰でも読めるようになっています。
　詳しくは、[AI周りのカンファレンス一行まとめ](https://qiita.com/Changkengo/items/d3a54fb510ce384f981e)にまとめられています。
**4.サーベイした技術を使ってみる　（応用）**
　このステップはかなり難しいです。論文を読んで理解し、かつ、その内容を実装するコーディング能力が求められます。
　しかし、有名な論文はソースコードがGithubに公開されている、あるいは、他の研究者が再実装しGithubに公開していることが多いです。Githubに公開されている場合は、ラッキーです。そのまま、ソースコードを取ってきて、データセットもダウンロードして実行するだけです。
　最近は機械学習を支援するサービスが色々出ていて、簡単なAIタスクだと、[Kaggle](https://www.kaggle.com)上に大体あります。
　例：[スパムを検出するソースコード](https://www.kaggle.com/futurist/text-preprocessing-and-machine-learning-modeling)

#ゼロからすぐ始められるAI
　ソースコードから始めるのが王道です。今回はAIのプログラムを実行してもらうことで、AIの入門をします。[Kaggle](https://www.kaggle.com)というサービスに登録して下さい。ソースコードがそこにあります。[Kaggle](https://www.kaggle.com)は、機械学習の計算マシン(GPU等)、データセットを無料で提供しています。しかも、他の人が書いたソースコードをそこですぐ実行できます。
　Kaggle入門について[この記事](https://www.codexa.net/what-is-kaggle/)に詳しく書かれています。
###入門レベル
　ここでは、機械学習の入門によく使われる問題とそのソースコードを列記します。URLにアクセスして、Kaggleに登録すれば、そのまま実行できます。
**1.画像認識**
　[手書きの数字を認識するタスク](https://www.kaggle.com/anebzt/mnist-with-cnn-in-keras-detailed-explanation)が、最も有名な画像認識のタスクです。Kaggle上に置いてありますので、ソースコードをforkすればそのまま実行できます。
**2.自然言語処理**
　ディープラニングを使って[スパムを検出するタスク](https://www.kaggle.com/futurist/text-preprocessing-and-machine-learning-modeling)です。
**3.データマイニング**
　Kaggle入門でよく使われる、[タイタニックの生前者を機械学習で予測](https://www.kaggle.com/ldfreeman3/a-data-science-framework-to-achieve-99-accuracy)するタスクです

###中級レベル
**1.自然言語処理**
　自然言語処理で最も重要なタスクが翻訳です。近年の翻訳精度を大きく上げたきっかけがSequence2sequenceと呼ばれる技術です。翻訳元の文を系列として入力して、系列を出力する技術です。今回は、英語とフランス語のサンプルがありますので、ご紹介します。
　[日仏翻訳プログラム](https://www.kaggle.com/jannesklaas/a-simple-seq2seq-translator)
**2.画像認識**
　入門では、手書きの数字10個をクラスリングするタスクでした。中級では、認識するクラス数を増やし、ニューラルネットワークも複雑化します。
　[フルーツを認識する画像認識プログラム](https://www.kaggle.com/shivamb/cnn-architectures-vgg-resnet-inception-tl)
**3.データマイニング**
　入門ではタイタニックの生存者を予測しましたが、このタスクをより掘り下げて、データの可視化、特徴抽出(feature engineering)、学習モデルの選別を詳しく説明しているプログラムがありますので、これを使ってよりデータマイニングを理解しましょう。
　[A Comprehensive ML Workflow with Python](https://www.kaggle.com/mjbahmani/a-comprehensive-ml-workflow-with-python)

#発展
　Kaggleでサンプルコードを実行しながら、機械学習のプログラムを理解し、自分でコーディングできるようになれます。しかし、Kaggle上には最先端のAIというものがまだ少ないと思います。そのため、本当に最先端のAIを理解するためには、やはりトップカンファレンスの論文を読んで、再実装するしかないと思います。下に、人工知能の各分野の論文の情報源を書いておきます。サーベイするときに役立てて下さい。
**1.自然言語処理**
　自然言語処理のトップカンファレンスの論文がほとんど次のサイトに無料で公開されています。年度別、カンファレンス別に論文が分けられており、キーワードで検索することもできます。ぜひ使ってみて下さい。
　[ACL Anthology](http://aclweb.org/anthology/)
**2.画像認識**
　画像認識のトップカンファレンス(CVPR、ICCV、ECCV)の論文は以下のサイトで無料で公開されています。
　[Computer Vision Foundation open access](http://openaccess.thecvf.com/menu.py)
**3.データマイニング**
　データマイニングのトップカンファレンスが[KDD](https://www.kdd.org/kdd2018/accepted-papers)、[ICDM](https://www.google.com/search?client=safari&rls=en&ei=J7EMXMWRFIuIoAT8gam4CQ&q=icdm+2018+accepted+papers&oq=icdm+2018+a&gs_l=psy-ab.3.0.0l2j0i22i30.1581.2500..2783...2.0..0.246.357.0j1j1......0....1..gws-wiz.......0i71j0i67.ghKtUF_2lNw)ですが、この分野は論文で無料で公開されるサイトがないので、各年度の学会の論文リストから、公開されているかどうか検索する必要があります。下は、2018、2017のKDD、ICDMで発表されている論文一覧です。
　[KDD2018](https://www.kdd.org/kdd2018/accepted-papers)
　[KDD2017](https://www.kdd.org/kdd2017/accepted-papers)
　[ICDM2018](http://icdm2018.org/program/list-of-accepted-papers/)
　[ICDM2017](http://www.ucs.louisiana.edu/~sxk6389/Program/ListofAcceptedPapers.html)
　検索キーワードは、"KDD year accepted papers"でその年の論文リストが出てきます。

#まとめ
　「AIとは何か」から「最先端のAI」までの内容を書きましたが。数学（線形代数、確率・統計）を理解でき、Python、英語もできるエンジニアの方なら、順調に読み進めたと思います。この記事が少し難しいなら、[機械学習のための数学](https://qiita.com/aokikenichi/items/229f2886578f5eee4649)、[機械学習のためのPython](http://www.cl.ecei.tohoku.ac.jp/nlp100/)、[ゼロからの機械学習](https://qiita.com/junichiro/items/3457e33e502086a200f1)、英語を復習すれば、理解できると思います。
　**上に書いたプログラムを理解するには、時間がかかると思います。しかし、それがAIを理解するための最短経路だと思います**。なぜならば、それらがAIを理解するのに、必要なものだけで実例として使われているからです。AI教科書等々で学習するより、実際コードを動かしながら好きなようにコードを書き換えていくのが一番早く理解につながるからです。

　NewsPicksは5年後、世界で最も影響力のある経済メディアになるという目標を実現するための仲間を募集しています。興味がある方は、[応募](https://www.wantedly.com/projects/177871)して下さい。

　AdventCalendarの明日(12/10)の担当はNewsPicksの英語ペラペラの松本さんです。英語をいかに学習したかを、書く予定です。お楽しみにして下さい。

#追記
　AdventCalendarの10日を担当する松本さんの記事ができました。
　英語がペラペラな彼がいかに英語を学習したかをぜひ読んでみて下さい。[英語学習をハックする](https://medium.com/@matsumotobybros/こんにちは-228547a1200b)