PythonがAIに使われる理由とおすすめ勉強法

PythonがAIに使われる理由とおすすめ勉強法

人工知能プログラミングに挑戦してみよう

最近、いたるところで人工知能の話題が満載です。GoogleのアルファGoが囲碁のチャンピオンを破ったり、ロボットが人間の受け答えをしたり、いまや自動運転の車が道路を走ろうとしています。
現在の人工知能は、人間の脳神経の情報システムをモデルにしたニューラルネットワークを多層に組み合わせたディープラーニングが主流ですが、このディープラーニングを扱うためのツールにはPythonという言語が使われることが圧倒的に多いです。
そこでこの記事ではまずPython言語の紹介、次になぜPythonが人工知能の分野で使われるようになったかの理由を紐解いたあと、人工知能のプログラミングをするためのPythonの勉強方法についてご紹介します。

Pythonの歴史

Pythonは1991年オランダ人のグイド・ヴァン・ロッサム(Guido van Rossum)によって開発された言語です。

画像

Pythonは同じくオランダで開発された教育用言語であるABC言語の強い影響を受けました。ヴァン・ロッサムも数年間このABC言語の開発に携わっていました。

彼は大学でコンピュータサイエンスを専攻した後、いくつかの研究機関を経て、2005年から2012年までGoogleで働き、2013年にはGoogleを離れ、Dropboxに移っています。

画像

ヴァン・ロッサムはイギリスのBBCが製作した大ヒットコメディ「空飛ぶモンティ・パイソン」の大ファンであり、Pythonの名前の由来はここから来ています。

画像

このPythonを日本語にそのまま翻訳するとニシキヘビになります。

画像

Pythonの1.0は1994年の1月に、その後2.0が2000年にリリースされました。現在もっともよく利用されていると思われる2.7は2010年にリリースされました。 Python 2系と大きく異なる3系は2010年にリリースされています。現在3系の最新バージョンは3.6です。

Pythonの特徴

PythonはPearl,PHP,Rubyと同様に動的言語です。  Pythonは教育用言語であるABC言語の影響を受けています。バンロッサムもPythonの発展過程において万人のためのプログラミング言語を掲げて、誰がプログラミングしても同じようなコードになり、結果として可読性の高い言語を目指しました。

Pythonは静的で型に厳格なC言語やJava言語と比較すると習得しやすく、教育用言語として子供が最初に学習する言語としてもよく利用されます。Pythonの大きな特徴はコードのかたまりであるブロックを表すためのインデントです。以下の例でRuby、Javascriptとの表記の違いを見てみましょう。

例として配列の中の配列の合計を計算するプログラムをPython、Ruby、Javascriptで書いてみましょう。これは配列の2段のネスト構造を2つのforループで処理します。

以下のコードはRubyです。こちらはforのブロックをendにて表わします。

Javascriptでも記述してみましょう。JavascriptはJavaやC言語と同様にコードブロックを括弧で表します。

Pythonでは以下のようにインデントを誤ると当然ながらその動作が変ります。

Pythonより2年遅れて1993年に登場したRubyはまつもとゆきひろ氏によって開発されました。 動的言語でインタープリタ上で動く生産性の高い言語としてPythonはよくRubyと比較されます。

画像

2004年にはデンマークのデイヴィッド・ハイネマイヤー・ハンソンにより開発されたRubyベースのWeb開発フレームワークがDRY(Don't Repeat Yourself)のコンセプトの元、登場し世界的に爆発的な流行を経て、Rubyは世界的な市民権を得ます。

科学技術計算分野で発展したPython

一方、Pythonは科学技術計算の分野で発展してきました。実はPythonは世に出たころからから科学技術計算の分野に着目し、当初よりラムダ関数やMap/Reduce関数を持っていました。そして1995年にはヴァン・ロッサムも参加する行列計算のためのMatrix SIGが設立され、Jim  Hugunin氏などがNumpyの祖先であるNumericをリリースしました。

そして何といってもこの分野のキーパーソンはTravis Oliphant氏です。彼はNumericと後の2011年にリリースされたNumArrayを統合して2005年には現在Pythonのスタンダードとも言えるNumpyをリリースしました。このNumpyはPythonにおいて数値計算のみならず、統計、機械学習、ディープラーニングにおいて欠かせないライブラリとなっています。Numpyの公式サイトは以下になります。

http://www.numpy.org/

そしてTravis Oliphant氏はScipyの開発について初期から関わっています。このScipyは高速フーリエ変換、スプラインを含む補完、数値積分、信号解析、画像処理などを含む高水準数値計算ライブラリです。Scipyは商用数値計算ライブラリであるMatlibに代替となり得るオープンソースソフトウェアです。Scipyの公式サイトは次の通りです。

https://www.scipy.org/

統計計算分野におけるPython

R言語

これまで統計解析の分野におけるオープンソースにおけるデファクトは何といってもR言語です。R言語はニュージーランドのオークランド大学のRoss IhakaとRobert Clifford Gentlemanによって開発され、1996年に初期リリースがなされました。

R言語は高速な組込み関数群を提供し、優れたグラフ機能とデータ互換性を持ち、膨大な統計計算ライブラリを提供するCRANネットワーク環境があります。そして、無償でオープンソースであること、膨大なライブラリ資産があることから、大学をはじめとする教育機関、研究機関に広く利用されています。Rでは統計計算を行なった結果をグラフなどで可視化する強力なグラフィックライブラリであるggplot2があります。

統計解析などデータを扱う分野では、プログラミングだけでなく、結果の共有や再現、説明用のドキュメントの作成などレポーティングがとても重要になります。R言語のためのRmarkdownはこのような目的のため利用することができます。

そして2011年にリリースされたRStudioと呼ばれる統合プログラミング環境により、言語、Rmarkdownのドキュメント作成、グラフ作成がひとつの統合環境で効率よく行うことができます。このようにRは統計分析を扱うデータサイエンティストのデファクトの環境になっています。

以下は筆者の環境でRStudioを動かしたものです。

画像

IPythonおよびJupyter notebook

IPythonは通常のPythonのインタープリタと比較して補完機能やコードハイライティングなどの機能を提供することでより使いやすく生産性の高い統合されたPythonのプログラミング環境を提供します。さらにはGTK、Qt、WXによる描画、グラフの作成も可能です。IPythonはscipyの一部として提供されました。

Notebookはブラウザ上におけるプログラムのインターラクティブな開発、実行環境です。 そしてノートブックと呼ばれるドキュメントを作成し、プログラムの記述と実行結果の保存、説明のためのドキュメントの作成と共有、再現などをブラウザ上で行うことができます。

IPython notebookはPythonベースのノートブックの環境を提供するものです。IPython notebook用のサーバーを立ち上げておくことで、ローカル、リモートのWebブラウザからアクセスすることができ、そこでインターラクティブな開発、実行環境を利用できます。そしてnotebookのドキュメントとしてMarkdown形式の記述も行うことができます。

このようにIPython notebookを用いることでR言語が提供していたデータサイエンティストの環境を提供できるようになりました。IPython notebookは多言語環境を目指してJupyter notebookという名称になりました。Jupyter notebookはTensorflow、ChainerなどPythonベースのディープラーニングライブラリのデファクトの開発、実行環境となっています。

後述のMatplotlibをJupyter notebookから利用することで以下のように2次元や3次元の グラフをブラウザ上で簡単に表示することができます。

画像

Matplotlib

MatplotlibはPythonベースの2Dの描画ライブラリであり、グラフ、イメージの描画を行うことができます。2Dとありますが、3Dのグラフ描画も可能です。MatplotlibはIPythonやJupyter notebookから簡単に利用することが可能です。Matplotlibの公式サイトは以下の通りです。

http://matplotlib.org/

以下は筆者がMatplotlibを用いてsinカーブを描いたものです。

画像

Matplotlibにより様々なグラフ、イメージの描画を行うことができます。以下のギャラリを参照いただければと思います。

https://matplotlib.org/gallery.html

Pandas

PandasはPythonで記述されたデータ分析のためのライブラリです。PandasはWes McKinney氏が2008年に開発したツールです。PandasはR言語のようなデータフレームのデータ構造があります。そして、ファイナンスの分野で発展してきたことからデータ分析の中でも時系列処理に強いと言われています。Pandasの公式サイトは以下の通りです。

http://pandas.pydata.org/

以下は今年の日経225銘柄の平均をグラフ化したものです。

画像

このようにPandasもJupyter notebookとの組み合わせでよく利用されます。

Pythonが人工知能の分野で使われる理由

これまでの説明を振り返ってPythonが人工知能の分野で使われる理由を挙げてみます。

まず、Pythonが科学技術計算の分野で発展してきたことです。特に行列計算を含む科学技術計算のライブラリであるNumpyが開発され、その使いやすさで人気を博したことが挙げられます。現にディープラーニングのライブラリであるTensorflowやChainer、TeanoはこのNumpyを利用しています。

さらにブラウザベースの統合開発環境である使いやすいJupyter notebookやその上で動く可視化ライブラリであるMatplotlibの存在も重要です。このような分野ではR言語や商用ソフトウェアであるMATLABが先行していました。しかし、Python自体の汎用性や言語自体の簡潔さが人気を博して進化して先行するソフトウェアとほぼ同等のことが可能となりました。

そしてなんといってもPythonが持つ習得しやすさ、生産性の高さ、コードの可読性により多くのひとから支持されて言語自体が広がったことではないでしょうか。

そしてディープラーニングの主要なライブラリのうち、GoogleのTensorflow、Preferred NetworksのChainer、モントリオール大学のTheanoはPythonベースで実装されています。機会があればこれらのツールをご紹介したいと思います。

Pythonのおすすめの勉強方法

最後にPythonのおすすめの勉強法を紹介しておきましょう。Pythonに限らず、プログラミング言語の習得は習うより慣れろです。Pythonにおいてもまずは動かす環境を整えてから、対話型実行環境であるJupyter notebookが起動できる環境を構築しましょう。

Anaconda

AnacondaはContinuum analytics社により提供されている科学技術計算、データ分析などPythonでよく利用されるパッケージをまとめてインストール可能にしているパッケージであり、ここで紹介したNumpy、Scipy、Matplotlib、Jupyter notebookも含んでいます。Anacondaは400以上のPythonパッケージを含んでいるので、個別のインストール、セットアップの手間を省くことができます。

画像

Anacondaはもし、Pythonがインストールされていなければ、Pythonの環境もインストールしてくれます。そして、開発者や利用するソフトウェアや、パッケージのバージョンによって環境を切り変えるCondaと呼ばれるパッケージ管理ツールもあります。Anacondaのホームページはこちらです。

https://www.continuum.io/

Anacondaは以下のサイトからダウンロードできます。Linux、Mac、Windowsの環境をサポートしているので、導入はそれぞれの方法を参照して下さい。Pythonはまずは3.x系(3.6)を利用することでいいかと思います。

https://www.continuum.io/downloads

いずれのプラットフォームについてもダウンロードしたファイルを実行すればインストールが完了します。そうすればJupyter notebookを起動してみましょう。

Numpy、Matplotlibの習得

Jupyter notebookが無事起動したら、Numpy、Matplotlibを使ってみましょう。Numpyは英語ですが、本家のサイトにクイックスタートがあります。

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

順番に打ち込んでいくことでNumpyでできることだけでなく、Pythonの文法にも慣れていくと思います。英語の苦手な方は幸いにしてマイクロソフトのかとうまさきさんが 私訳で日本語に訳していただいていますのでこちらを参照下さい。

http://learning-memo.hatenablog.com/entry/2017/02/02/202103

Matplotlibは以下に本家のチュートリアルがあります。

https://matplotlib.org/users/tutorials.html

日本語ではこちらにごく簡単なチュートリアルがあります。

http://iatlex.com/python/matplotlib_intro1/

Pythonそのものの学習

Python自体は非常に習得しやすく上記のNumpyとMatplotlibを学ぶ過程で雰囲気はつかめるかと思います。以下のサイトは入門から応用までの幅広い層を対象にしたサイトです。

http://www.python-izm.com/

ごく手短にPythonを学びたければ以下のpdfを読まれてはいかがでしょう。

http://biosciencedbc.jp/gadget/human/20150728_hattori.pdf

おわりに

今回、AIにPythonが使われる理由ということでPythonの概要とPythonが現在のAI、つまりディープラーニングの世界で使われるかの理由、およびディープラーニングのライブラリを利用するための前段階の位置付けでPythonの学習方法を述べました。Pythonを習得したらGoogleのTensorflowなどを用いて華麗に人工知能の世界にデビューしてみませんか。機会があればTensorflowについても書かせていただきたいと思います。

著者について
橋本 誠
プログラミング言語、特にLisp、関数型言語に興味あり。『Cloujure Programming Cookbook』という書籍をPackt Publishingから共著で出版。

PR_infeed

PR_Relative

オウンドメディア運営会社の皆様へ

s

ページトップ