AI・機械学習プログラミングでPythonが選ばれる3つの理由
<本サイトで申込みの多いAI系プログラミングスクール>
No.1 Aidemy Premium Plan *オンライン受講のAI、機械学習スクール
No.2 AIジョブカレ *講師の質がバツグン!AIエンジニアの転職支援まで実施!
No.3 Data Mix *データサイエンティストを目指すならここ!
AI・機械学習といえばPythonを使ってプログラミングするもの、というイメージが強いです。
その理由は3つあります。
1.そもそも世界で流行しているから
2.AI・機械学習に便利なPython向けライブラリや開発環境が整っているから
3.機械学習の流行により、初学者がPythonを学ぶようになっているから
ここでは、そもそもAIや機械学習がなんなのか、
どのようなライブラリや開発環境があってPythonが便利なのか、
Pythonを学習するためにはどのような本や手段があるのかを解説します。
まず、AIと機械学習とPythonの関係は?
ここでは、そもそもAIと機械学習が何なのかと、PythonとAI・機械学習がどう結びついているのかを説明します。
IEEEという世界トップの国際学会がまとめたプログラミング言語の流行ランキングがあります。そのうち、どのプログラミング言語の仕事の募集が多いか、というランキングをまとめると、Pythonが上位に来ています。
2018年のプログラミング言語ランキング(IEEE Spectrumより)
特に、AI・機械学習・IoTに関わるプログラミング言語の存在感が増しているのがわかります。今はトップに輝くのがPythonです。
なぜAI・機械学習にPythonが使われるのか?
端的に言えば、PythonはAI・機械学習の開発に使えるライブラリがたくさん揃っており、その開発が現在進行系で進んでいるからです。
AIや機械学習のプログラミングをする際は、すべての計算を自分で書くわけではありません。(AIに限った話ではありませんが。)
Pythonは開発された当時から、科学技術計算を行いやすいように作られました。そのため、科学技術計算を行うためのライブラリが多くPythonには存在します。
さらに優秀なエンジニア・研究者たちが、現在進行形で、高速かつ便利に使えるライブラリを開発してくれています。しかもその多くは無料で使えます。
たとえば、Googleが作っているTensorFlowやFacebookのPyTorchはとても有名です。日本でもプリファード・ネットワークスがChainerというライブラリを作っていましたが、PyTorchに統合されました。
AIや機械学習は数学的処理の塊です。行列計算や統計処理など山のように用いられます。それらを逐一実装していると時間がいくらあっても足りません。ライブラリが整っているおかげで効率よく学習でき、効率よく開発ができます。
そのため、AIや機械学習のプログラミングにおいて、Pythonが使われているのです。
そもそもAI(Artificial Intelligence : 人工知能)とは?
では、そもそもAIとはなんでしょうか?
AI(人工知能:Artificial Intelligence)には様々な解釈がありますが、ここでは人工知能学会の紹介している定義を元に紹介します。
人工知能・AIとは「人間の知能を持つ機械」あるいは「人間が知能を使ってすることができる機械」を意味します。前者の「人間の知能を持つ機械」を「強いAI」、後者の「人間が知能を使ってすることができる機械」を「弱いAI」と区別しています。
強いAIは汎用型人工知能(AGI)として研究が盛んに行われています。要は、人間のように思考し、振る舞うことのできるシステムということです。当然ながら非常に高度です。
そもそも、人間の知能に関する研究も、現在活発に行われているもので、全貌が判明しているものではありません。
人間の知能をシステム化しようとする強いAIのグループと、人間の知能を解明しようとするグループが相互に作用しながら、人間の知能の再現に進んでいる、というような状態です。脳科学(神経科学)と機械学習を組み合わせたAIの研究というのも盛んです。
弱いAIはスパムメールの自動判別、Marketing Automation、製造機械の品質管理など様々な場所で活躍しています、
Pythonを使って、AIについて学びたい場合、最初に手を付けるのは弱いAIです。
この弱いAIの基礎技術となるのが機械学習です。
機械学習(Macine Learning)とは?
機械学習とは「データから機械自身にそのふるまいを学習させるための技術」です。
将来的には、人の介在なく、機械が過去のデータから学び、未来の判断・行動を正しく行うことが期待されています。時系列データの予測、離散データの分類などが機械学習の主な対象です。
機械学習の活用例として、自動運転、文字の識別、顔の識別・検知、レコメンド、ニュースやメールのフィルタリングなどです。他にも文章を自動生成したり、株価を予測したり、医療画像を診断したり、活用範囲は大きく広がっています。AIの活用事例として挙げられるものと重複するものも多いです。
例えば、自動運転では、道路の形、標識や信号の意味を自動運転車に学習させます。そのうえで、事故を起こさずに、交通ルールを守り運転ができるようにするものです。
このように、人間が行っていたことを機械(プログラム)が行えるようになったら、自動運転のできる弱いAIができたことになります。この、弱いAIを構成する技術の中には機械学習の要素が多分に含まれているので、AIと機械学習が説明を簡単にするために、同列のように扱われることが多いのが現状です。
AIが注目され、「人間の仕事を奪う」とまで言われるようになったきっかけは?
現在のAIブームのきっかけはアルファ碁というAIが人間のトップ棋士に勝利したことがきっかけです。チェスや将棋と比べたとき、囲碁は石を置く場所の自由度と盤面の大きさが大きいです。そのため、AIが人間に勝つのはもっと先だろう、と言われていました。それが、2017年にはあっさりトップ棋士に勝利です。
アルファ碁は強化学習と深層学習(ディープラーニング)を組み合わせたアルゴリズムを用いていました。それまでにあまり注目されていなかった「深層学習」の効果の大きさに、衝撃が走り、深層学習(ディープラーニング)を中心とした、機械学習ブームが起こり、様々なビジネス活用の期待も相まって、これだけの注目を集めています。
現在、深層学習周辺の分野は日進月歩で非常に大きな研究開発競争のトピックとなっています。
AI・機械学習エンジニアになぜPythonが求められるのか?
一言で言えば、「世界の潮流だから」です。Pythonを使ってAI・機械学習の研究開発をしている人が多く、また、そのような環境が急速に整い、発展しています。なので、他の言語でも同じようなことができますが、全く効率が違います。
現在主流となっているPythonのフレームワークやAI・機械学習に使われるライブラリはアップデートも多く、必要な機能が揃いやすいということも意味しています。つまり、Pythonを使うと開発が効率よくできるのです。
Pythonはしかも、汎用的に使えるプログラミング言語です。AI・機械学習にとどまらず、Web開発なども行えます。AI・機械学習を中心として、それらをいかに実装するか、を考えた場合、1つのプログラム言語で完結できれば、その方が効率が良いのです。
とはいえ、必ずすべてをPythonで開発するわけでもありません。
Python以外でAI開発をしているエンジニアも多い
すべてのAI・機械学習エンジニアがPythonを使っているか、というとそういうわけでもありません。
なぜなら、Pythonはスクリプト言語と呼ばれる、計算に非常にマシンパワーが必要でかつ、低速なプログラミング言語だからです。
例えば、C言語やC++言語はコンパイル言語と言って、プログラムを作成するたび、変更するたびにコンパイルという、プログラム言語から機械語に変換する作業が必要になるプログラム言語です。
機械語に変換しているため、その動作は非常に高速です。
すでにエンジニアとしてのレベルが高い、Javaを使いこなしている、C++を使いこなしている、という場合は、そのままその言語で機械学習をする、という選択もあります。
例えば、ライブラリもJavaやC++は揃っています。JavaでDeep learningをするなら、Deeplearning4jがあり、機械学習系のライブラリはJava machine learning Libraryがあります。C++の機械学習ライブラリにはDlibというものがあります。
これらを活用する、という人や企業もあります。
今からAI・機械学習エンジニアを目指すなら、
間違いなくPython一択
しかし、現在1つ目のプログラミング言語を学ぼうとしており、かつ、AIや機械学習に興味があるならPython一択です。Pythonはコンピュータサイエンスの授業の最初に使われるプログラミング言語になりつつあります。
CourseraやedXといった大学の講義を動画配信しているサービスでも、Pythonの講座が基礎講座として配信されているのがわかります。
MITの教科書でPythonによるプログラミングイントロダクションがあります。日本語に翻訳されており、これを教科書として採用しているところも増えているようです。
何故かと言うと、Pythonはプログラムを書いたらすぐに実行することができ、実際に動かすことができるからです。対話型のプログラミングができるとも言います。
反対はC言語のようなコンパイルが必要なプログラミング言語で、なにかする度にコンパイルが必要になるため、フィードバックを得るまでに時間がかかります。特に学習初期には、PythonもCも実行速度が気になるレベルにはなりません。
そのため、Pythonのようなすぐにフィードバックが得られるわかりやすい言語が用いられるようになっているのです。
また、Pythonは、数学で使う行列や統計、ベクトルなどの計算に使うライブラリが充実しています。機械学習やAIは統計や行列を多用しますので、これが簡単に使えることは初学者にとって大きなメリットです。
AIエンジニアをこれから目指す場合、数学とプログラミングをどちらも習得する必要があります。Pythonを使ってプログラミングを行い、手を動かしながら、その意味合いを数学から紐解いていく、という順の学習も可能です。もちろん理屈を知ってからプログラムする、というのも可能です。
この双方向性が、プログラミングの学習においてとても好ましいです。
また、Pythonはデータ分析からWeb開発まで幅広く実行可能な汎用プログラミング言語です。汎用性の高さも、Pythonが選ばれるようになっている理由の1つです。
Pythonを使った機械学習・AIプログラミングスクールが、AIエンジニアの転職斡旋をしているケースも有る
エンジニアになりたい、と思った時にプログラミングスクールに通う人が増えています。会社員をやりながら、プログラミングを学び、エンジニアへの転職も斡旋してくれるからです。しかし、JavaやC++のスクールがAIエンジニアの転職斡旋をしているケースはありません。
そのため、確実にAIエンジニアへの転職につなげようと思ったらPythonを使って機械学習やデータサイエンスを学んだほうが良いでしょう。
そのようなプログラミングスクールの代表例としてAIジョブカレがあります。AIジョブカレの「機械学習講座」は、Pythonを用いて機械学習アルゴリズムを実装できるようにする講座です。受講後の修了試験に合格すると、AIエンジニアへの転職を斡旋してもらうことができます。企業としても、Pythonで機械学習を実装できる人材が求められているのです。
なぜAI・機械学習のライブラリがPythonに揃っているのか?
AIや機械学習の分野では科学技術計算が多用される
AIや機械学習は、数学の理論をいかにプログラム上で実現するか、ということが1つのテーマです。
例えば、データを予測する一番基礎的な方法に最小二乗法があります。離散データのなかから、最も誤差が小さくなる関数f(x)を求める時に使う方法です。線形代数、ベクトル、行列、統計など、数学的な処理を多分に行います。
そのため、AIに関する専門書を読んでいると、数式がたくさん出てきて面食らう人もいるかも知れません。
仕事のレベルで機械学習やデータサイエンスを扱おうと思ったら、このあたりの数学的理解もしないといけません。
しかし、とりあえず動かしてみよう、位のレベルであれば、便利なライブラリを活用して、実際の動作を見てみる、くらいで大丈夫です。
AI・機械学習のベースとなっている科学技術計算ライブラリ
Numpy(ナンパイ)
Numpyは配列計算を高速にするために作られたライブラリです。Pythonの配列をそのまま使うよりも遥かに高速に処理できます。
何故かと言うと、Pythonのライブラリではあるのですが、CythonというPythonの書き方でC言語を扱えるようなプログラミング言語を介して作られているからです。Cythonを使うと、Pythonで書くよりもおよそ100倍の実行速度になるそうです。
行列計算は、次元が増えるほど計算量が指数関数的に増えていきます。機械学習も多次元を扱うため、計算は早ければ早いほど望ましいです。
そのため、他の科学技術計算ライブラリの基礎的な位置づけになっているのが、このnumpyです。逆にnumpyがあるからこそ、Pythonが科学技術計算でもよく使われるようになった、という背景があります。
英語ですが、numpy100本ノックもあります。機械学習を本格的に学ぶ人は、やってみて自分なりの解説を作ってみるといいでしょう。
日本語版では、AidemyがNumPyの講座を出しています。
Pandas(パンダス)
Pandasは、データ処理のための「データフレーム」を作るのによく使われるライブラリです。特に、数表と時系列データの扱いを得意とします。
X×Yの表データを作成した際に、その表の特徴を簡単に表現したり、特定の要素を呼び出したり、乱雑なデータを処理できる形に整形したりします。
機械学習やデータ分析をPythonで行う上で欠かせないライブラリの1つです。
グラフや散布図などの描写もできます。
特に機械学習やデータ分析では、データを処理しやすい形に成形するのが非常に重要です。実際、機械学習計算の半分以上の時間はデータの整形に使われているそうです。前処理大全という本になっているくらいです。
Numpyと同じようにCythonを使って書かれているので、Pythonで書くよりも高速に動作します。
matplotlib
Matplotlibはグラフの描写をするためのライブラリです。かなり多様なグラフが作成可能です。
例えば時系列データを数字で表示されてもよくわかりません。グラフにして表示して、その意味合いをわかりやすくすることで、自分も他人もデータの意味を理解することができます。
どのようにグラフを描写するかはとても重要なので、特にnumpyを使う場合に重宝されます。pandasと違い、グラフの描写機能がないので。
SciPy(サイパイ)
Numpyよりも高度な数値計算処理を行えるのがScipyです。numpyの機能はすべて含まれています。
PythonをMATLABのように使えるようにするというのがコンセプトのようです。Numpyだけだと難しいフーリエ変換、積分、信号処理、統計や、物理数学定数のような物理・数学処理を簡単にしてくれます。
PythonでAI・機械学習を学ぶ時に使うライブラリ
scikit-learn(サイキット・ラーン)
Pythonで機械学習を学ぶ、とは、最初にscikit-learnの使い方を学ぶ、と言っても過言ではありません。
機械学習の3大要素が「教師あり学習」「教師なし学習」「強化学習」です。(それ以外にもあります)
そのうちの、教師あり学習、教師なし学習のアルゴリズムと、データ前処理用のアルゴリズムが中心に含まれています。例えば、分類、回帰、クラスタリング、次元削減、モデル選定、前処理などです。
Scikit-learnのチートシートで、どのようにアルゴリズムを選定するべきか、ということがかいてあります。
何れにせよ、何かしら機械学習の本・講座を受けて、それぞれのアルゴリズムがどのように機能するかを学ぶのが第一歩でしょう。
open CV-python
顔の識別、文字の判定など、画像にかかわるシステムを作ろうと思ったときに大いに活躍するでしょう。もともと、画像処理ライブラリといえばOpenCVです。
インテルが開発し、オープンソースとして公開しました。OpenCVはPythonでも使えます。
また、機械学習のアルゴリズムも入っています。k近傍法、サポートベクターマシン、ランダムフォレスト、ニューラルネットワークなど、代表的なアルゴリズムを簡単に実装できます。
OpenCV-pythonのチュートリアルも英語版ですが用意されているので、試しに読んでみるとどんなことができるかわかります。
tensorflow
tensorflowとは、Googleが開発し、オープンソースとして公開した機械学習のためのライブラリです。特に深層学習(ディープラーニング)に用いられるイメージが強いですが、かなり汎用的に使えるライブラリです。
Python以外にも対応しており、C, C++,Java, Goでも使うことができます、
IntelのCPU向けに最適化されていたり、TensorFlow for Mobileとスマホ向けの軽量版があったり、バリエーションも豊富です。さすがGoogle様ですね。
Chainer
ChainerはPreffered Networksが開発し、オープンソースとして公開した深層学習のためのライブラリです。
tensorflowでは処理過程がブラックボックスになっているということで嫌がるエンジニアもいるようです。
TensorflowがDefine and Runという「ネットワークを固定してから学習する」方法を取るのに対し、Chainerは「Define by Run」というニューラルネットの構築をデータを流しながら行う形式を取ります。
そのため。自然言語処理ではChainerの方が使いやすいようです。
chainerはなんと日本語版でチュートリアルがあります。Chainerでできることの概要を掴むにはかなりありがたい内容です。
他にもPythonで使える機械学習・深層学習ライブラリがたくさん
PyTorch、Caffe、Theano、Deap、Stan、Edwordなど、ライブラリは数多く存在します。この量も、Pythonを使ったAI開発が世界的に盛り上がっていることの証拠です。
PythonでAI・機械学習プログラミングをする時に使う開発環境
Anaconda
Anacondaは、Pythonのデータサイエンス・機械学習に必要なライブラリのインストールやバージョン管理を簡単にしてくれるソフトです。ディストリビューションとも言います。
機械学習の入門ではAnacondaのインストール方法なども書かれており、Anacondaを入れると大抵の機械学習に使うライブラリを揃えることができます。
ただし、自然言語処理で使う、MeCabやChasenといったライブラリは含まれていないため、別途インストールが必要です。
とはいえ、Anacondaには、Spyderという開発環境、Jupyter Notebookなど開発環境全般が揃います。環境整備を非常に簡単にしてくれているのは間違いないです。
Jupyter notebook
Jupyter notebookは、Pythonで組んだプログラムの実行結果を記録しながら分析や開発を行うことができるツールです。(Python以外にも対応しています)
コードを書くパート、説明を書くパートなど、パートごとに記載する種類を分けることもできます。
特に、matplotlibを使ったグラフを表示しながら他の説明をできるため、プレゼンをJupyter notebookで実施する場合もあります。
学習する場合にもおすすめです。書いたコードと実行結果が表示され、コメントが簡単につけられるので、考えたことや学んだことを、実行結果とともに、書き残しておくことができます。
PyCharm community edition
PyCharmはチェコのJetBeansという会社が作っているPython向けの統合開発環境です。有料のものと、無料で使えるCommunityEditionがあります。
補完機能などが充実しており、関数の呼び出しなどの手間が少なく、非常に便利です。
Pythonで作ったAI・機械学習プログラムをWeb上で使うためのフレームワーク
Django、Flask、Bottleなど、Web開発用のフレームワークを使うことで、制作したAI・機械学習プログラムを簡単に公開することができます。
Pythonを使ったAI・機械学習プログラミングの教科書・本・サンプルコードが多く、学びやすい
いちばんやさしいPython教本
Pythonの基礎的内容から、軽量なWebフレームワークのBottleを使ったチャットボットの開発までが丁寧に解説されています。いちばんやさしいシリーズの例に漏れず、色使いもきれいで、わかりやすいです。実際にチャットボットが動くのは初心者には感動的です。おまけでPyQの体験コードが付いてきます。
退屈なことはPythonにやらせよう
Pythonの基礎的内容から、日頃行っているタスクの自動化までを丁寧に解説した本
Pythonの基本的な使い方が150ページ全6章に渡って書かれているため、Python初心者でもとっつきやすい。
第2部処理の自動化が本番。400ページにお渡り、解説、サンプルコード、演習問題の組み合わせでPythonを使った自動処理を学べる。
例えば、テキストのパターンマッチングに始まり、Webスクレイピング、Excelの自動処理、PDFやWordファイルから自分性を抽出する、メールの自動送信、画像処理などなど
手作業で繰り返しているような内容を、Pythonを使って自動化する方法がふんだんに紹介されています。
Excelなどは特にVBAを使えばいいんじゃないか、という声もありそうです。しかし、ExcelしかできないVBAと、汎用性の高いPythonであれば、Pythonのほうができることの幅が広がっていいんじゃないかと思います
PythonによるAI・機械学習・深層学習アプリの作り方
こちらは、Pythonが使えることを前提に、機械学習のアプリを作る本です。
機械学習でよくある、あやめの分類、ワインの美味しさ判定、気象データ解析などからスタートします。
OpenCVを使った顔検出、文字認識、動画解析
言語判定、単語の意味をベクトル化、文章の分類、自動作文、スパム判定といった自然言語処理なども行います。
Pythonの基礎はわかっているという前提で、AI・機械学習・深層学習アプリをガリガリ開発するための本という感じです。
ディープラーニングでは、再びあやめの分類、手書き文字の判定、写真判定、
あるいは、業務システムの効率化、ニュース記事の分類、料理の写真からカロリー判定といった高度なプログラムも実装します。
機械学習エンジニアになりたい人のための本
この本は前の3冊と違って、機械学習エンジニアになりたい人がどのように仕事を考え、学ぶべきか、という情報を網羅しています。全く機械学習についてわからない、という人や、機械学習エンジニアへの転職に興味がある、という人は、いちど読んでおいて損はないです。
達人データサイエンティストによる理論と実践Python機械学習プログラミング
世界的にベストセラーになったPythonの機械学習本です。PythonによるAI・機械学習・深層学習アプリの作り方よりも、より理論的な内容が充実しています。手が動くようになって、理論も含めて学びたくなったら手にとるといいと思います。
まとめ:Pythonを学んでおくと様々な使い方ができ、汎用性が高い
PythonがAIや機械学習で選ばれる大きな理由は、それが世界の潮流であり、ライブラリが充実し、開発も速いスピードで行われていることです。
さらに、Web開発を含め汎用的に使えるプログラミング言語であり、機械学習アルゴリズムとそれ以外のシステムを、プログラム言語を変えずに実装できる、というのもポイントです。
もし、本を読んで本格的に学びたくなったら、AI・機械学習の学べるプログラミングスクールに行ってみると良いでしょう。社会人向けに、仕事をしながら学習できるスクールが増えており、学習環境も整いつつあります。
仕事にしないまでも、教養として身につけたい、というニーズにも答えてくれるので、まずは無料のカウンセリングを受けてみることをおすすめします。
<本サイトで人気のAI系プログラミングスクール>
No.1 AIジョブカレ *講師の質がバツグン!AIエンジニアの転職支援まで実施!
No.2 Aidemy Premium Plan *オンライン受講のAI、機械学習スクール
No.3 Data Mix *データサイエンティストを目指すならここ!