人工知能について学んでみた（２ヶ月）

人工知能(AI)について２ヶ月学んできました。
AI初心者のAI初心者によるAI初心者のためのAI超入門的な記事を書いてみようと思います。
人工知能に興味がある、またはこれから人工知能を学んでみようという方にとって、少しでも参考になれば幸いです。
できるだけ「Simple & Short」に書くことを心がけます。
まだまだ未熟者なので、誤った内容などがあればご指摘いただけたらと思います。

# 人工知能の定義
人工知能の世界共通定義は今のところ**無い**。研究者の中でも解釈が異なる。
日本人の人工知能研究の第一人者、松尾豊先生は以下のように考えている。
**「人工的につくられた人間のような知能。ないしはそれをつくる技術」**（[引用元リンク](https://www.worksight.jp/issues/607.html)）

自分は以下の点が人工知能の重要な要素と考えている。
　1. **人間と同等またはそれ以上**の知的な振る舞いをする（直感的に知的と思える）
　2. 人間から見て**思考しているように見える**（決まりきったアクション・リアクションではない（ように見える））

# 人工知能開発の先進企業
現時点での人工知能開発先進企業は以下の４社。
　- Alphabet（Google）
　- Amazon
　- IBM
　- Microsoft
上記BIG4に次いでFacebookが位置している。
いずれも大量かつ多様なデータを保持している企業であり、人工知能開発に有利な環境が整っている。

# 人工知能の分野・用途
人工知能と一言で言ってもその適用分野はさまざま。現時点での主要な（流行っている）分野は以下の通り。
　- 画像処理
　- 音声処理
　- 自然言語処理
　- 制御
　- 予測
　etc...
まだまだ他にもあると思う。企業はこれらの要素を組み合わせて１つのサービスを提供したりしている。

# 人工知能・機械学習・ディープラーニングの関係
「人工知能」とセットでよく聞く「機械学習」と「ディープラーニング」。これらの大まかな関係は以下のとおり。

　*人工知能 ＞ 機械学習 ＞ ディープラーニング*

人工知能を実現する技術の一つとして「機械学習」があり、機械学習の中の技術の一つとして「ディープラーニング」がある。いずれも新しい技術ではないが、近年の「大量データの蓄積」「ハードウェア性能の向上」などにより、一気に注目を浴びるようになった。

**・機械学習**
　コンピュータに大量のデータを入力して、そのデータを解析し、有用な規則を抽出する手法。できることは大まかに「分類」「予測」「ルール抽出」。
　機械学習では人がプログラムを作らない。コンピュータ（機械）が答えを出すための手法を人間がプログラムとして与えるのではなく、機械が自動的に膨大なデータから学習してモデルを作る。

**・ディープラーニング**
　複数の段階の処理を重ねて、複雑な判断をできるようにする技術。（すごく大雑把...）

---
*ここからは少しエンジニア色の内容*

# 人工知能関連でよく使われるプログラミング言語
人工知能、と言うよりも機械学習でよく使われるプログラミング言語として**「Python」**と**「R」**がある。これらの言語でしか機械学習を扱えないという訳ではなく、どんな言語でもやろうと思えばやれるはず。ただし、ここで紹介する言語は、
　1. 機械学習やディープラーニングの「ライブラリ(*1)」が豊富にある（*1：汎用的に使えるようプログラムをまとめたもの）
　2. 科学計算や統計解析が得意
　3. オープンソースで開発されているフリーのプログラミング言語
などの理由からよく使われている。

**・Python**
　「可読性の高さ」「学習コストの低さ」「豊富なライブラリ」が特徴。機械学習分野に限らずWebアプリやデスクトップアプリなどの開発にも使われている。Webアプリケーションフレームワークの「Django」や「Flask」なども有名。

**・R**
　統計解析に特化したプログラミング言語。データ解析機能が豊富。グラフ描画も得意。（自分はRにはほとんど触れていません...）


# 機械学習・ディープラーニングライブラリ
有名なライブラリをいくつか紹介。（ただし現時点で自分が使ったことがあるのはscikit-learnとTensorFlowぐらい）

**・scikit-learn**
　Python向け機械学習ライブラリの定番。分類・回帰・クラスタリング・次元削減など、機械学習でよく使われるアルゴリズムをサポートしている。

**・TensorFlow**
　Googleがオープンソースで公開したディープラーニング向けライブラリ。汎用性・拡張性が高い。ドキュメント、チュートリアルが豊富。

**・Chainer**
　日本の企業「Preferred Networks」が開発したディープラーニング向けライブラリ。柔軟な学習ネットワークの構築が可能。日本語のドキュメントが充実。ただそれ故に海外でのコミュニティの広がりは鈍い。

**・Theano**
　Python用数値計算ライブラリ。玄人向け？
 
**・Caffe**
　高速な計算処理が得意なディープラーニング向けライブラリ。

# 人工知能API
各企業が人工知能を使うためのAPIを公開している（[参考リンク](http://www.itmedia.co.jp/news/articles/1703/08/news072.html)）。先述の人工知能開発先進企業BIG4が公開しているAPIであればチュートリアルも豊富なので、ぜひ試してみると良い。
他にもAPIマーケットプレイス「Apitore」や「Algorithmia」なども気軽に機械学習を体験できる。

# 人工知能・機械学習スキルを身につけるためのおすすめプラットフォーム・ツール・書籍 etc...
**・kaggle**
　データ解析のコンペサイト。金融・医療・マーケティングなど多種多様なデータがアップされており、それらのデータを使って予測モデルを構築し、予測結果を競い合う。コーディング、実行、結果確認まで全てをkaggleのプラットフォーム上で行うことができ、非常にハンディ。また、他の人のモデル（kernel）を見ることもでき、それらを見たり真似たりするだけでも非常に勉強になる。
（[データサイエンティストを目指して勉強するなら、Kaggleからはじめよう](https://qiita.com/KIKUYA-Takumi/items/13ac849582318f559271)）

**・Google Cloud Platform（GCP）**
　機械学習APIが豊富かつそれらのチュートリアルも豊富。（[機械学習で遊ぼう！APIサービスやTensorFlowを使ったサンプルレシピ集](https://book.mynavi.jp/manatee/series/detail/id=65670)）
　Amazon Web Serviceなども同様と思われるが、自分はまだGCPしか使っていない。

**・Jupyter Notebook**
　ノートブックと呼ばれる形式で作成したプログラムを実行し、実行結果を記録しながら、データの分析作業を進めるためのツール。百聞は一見にしかず、上述のkaggle上でも使えるので是非お試しあれ。

**・書籍**
　おすすめというか、とりあえずこれまで以下の本で勉強してきた。
　- [実践力を身につける-Pythonの教科書-](https://www.amazon.co.jp/実践力を身につける-Pythonの教科書-クジラ飛行机/dp/4839960240/ref=sr_1_1?s=books&ie=UTF8&qid=1507449814&sr=1-1&keywords=pythonの教科書)
　- [グーグルに学ぶディープラーニング](https://www.amazon.co.jp/グーグルに学ぶディープラーニング-日経ビッグデータ/dp/4822236862/ref=sr_1_1?s=books&ie=UTF8&qid=1507449860&sr=1-1&keywords=グーグルに学ぶディープラーニング)
　- [ゼロから作るDeep Learning](https://www.amazon.co.jp/ゼロから作るDeep-Learning-―Pythonで学ぶディープラーニングの理論と実装-斎藤-康毅/dp/4873117585/ref=sr_1_1?s=books&ie=UTF8&qid=1507449703&sr=1-1&keywords=ゼロから作るdeep+learning)
　- [Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎](https://www.amazon.co.jp/Pythonではじめる機械学習-―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎-Andreas-C-Muller/dp/4873117984/ref=sr_1_1?s=books&ie=UTF8&qid=1507450057&sr=1-1&keywords=Pythonではじめる機械学習)

これからも引き続き人工知能（主に機械学習）について勉強していきます！