HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

機械学習をpythonではじめよう

 

 

follow us in feedly

 

matlabとpython

matlab

matlabとは、mathworks社が提供している数値計算に特化したプログラミング言語とその開発環境です。コンピュータのことにあれこれ詳しくなくとも、ヘルプ機能なども非常に充実しており、これを購入しさえすればほとんどすぐに開発を開始できます。

 

またmatlabにはsimulinkと呼ばれる計算をグラフィカルに扱えるブロック線図(信号処理や制御工学ではお馴染み)を用いた開発環境もあり、リアルタイムのシミュレーションも即座に可能となっています。

 

開発環境の構築などのことを気にせず、ほとんど自分の専門分野のことに集中できるため研究の現場では人気を博していました。またライセンスが有料であるということからサポートも非常にしっかりしており、研究という場で正確な動作を保証しなければならない場面では、返って有料であることがその担保にもなっていると言えます。

 

python

一方pythonは、Ubuntuなどには標準搭載されているポピュラーなフリーのプログラミング言語です(というより普通はフリーだ)。これが今になって、機械学習の多くの場面で使われるようになってきました。

 

理由は、こちらも言語自体が高性能で、人間側があれこれ明示的に記述をしなくとも動作してくれるというところ、すなわち、自分の専門分野に集中できる環境がある程度整っているということにあるかと思われます。pythonは他の言語に比べて短い行数で望みのプログラムを書くことができます(これはmatlabも同じですが)。

 

機械学習をやっている人の興味は、どれだけ美しくプログラムを書けたかではなく、ある手法がどれだけの性能を持っているのかいち早く確認することです。そういう点で、pythonのような言語は受け入れられたのでしょう。またインタプリタを普通に使えることも、ささっと確認をしたいというときに便利です。

 

一般の人たちが、このpythonを使う理由は、ライブラリが充実しているというところにあるでしょう(これもmatlabにも当てはまる)。そしてmatlabと違い無料であることは、少しやってみたいなという人たちを取り込むことに成功しています。

 

フリーであること

機能の充実

pythonには様々なライブラリがあり、また少ない行数でプログラムを書くことができます。

機能面では有料のmatlabに引けを取らないようになってきました。そこでやはり決定打になるのはフリーであるということ。それは当たり前に思えるかもしれませんが、フリーであれば開発を行うユーザーも増え、様々なコミュニティーが生まれ、機械学習の研究自体も活発になっていきます。有料である場合とそうでない場合では、参加している母数に完全に開きが出てしまうのです。

 

また企業からすればライセンスが有料であることは経費を圧迫しますから、無料で同じことができるのであるならばそちらを選びたいというのはアタリマエのことです。

 

ITはフリーウェアに支えられている

世の中のITはほとんどフリーウェアです。OSもLinuxはフリーにも関わらず立派に発達しています。自動車の設計図が無料で提供されることはありませんが、OSの設計図(ソースコード)は無料なのです。勝手に使って誰が改造しても構わないというある意味異質な状態です。

 

これはインターネットやITが、パソコン一台あれば誰でも本格的に取り組むことができるからです。機械学習も本格的にデータ処理をしたいならばそれなりのハードが必要ですが、勉強をする上では動けば十分でしょう。そして知的好奇心だけで十分やっていける人たちが世の中にはたくさんいるため、その人たちに機会を与えれば、結果的にその業界そのものが育っていくことになります。

 

googleが社内の開発で実際に用いているtensorflowを世の中に公開したのも、機械学習そのものの発展を願ってのことでしょう。より多くの人に開発に参加してほしいという思いがあるのです。

 

pythonを学ぼう

機械学習を通して

先日の以下の記事

s0sem0y.hatenablog.com

を書いていて思ったのが、私は実装系に関する書籍を真剣に読んだことがないなということでした。実際、数学的な面はかなり勉強を進めており、PRMLような機械学習の古典的名著も読み進めながら深層学習に関する上記で紹介した本や論文にも手を付けています。

 

実際、プログラミングは何かを動作させる手段として考えており、私自身はプログラミングだけを真剣に勉強したことはありません。あくまで目的の達成にプログラミングという過程があったので、それをその場その場でやっていました。

 

しかし、真剣に機械学習を学んでいくうちに、機械学習を通してプログラミングを真剣に学んでみようという思いも強くなってきました。そこでmatlabの方もやりながらpythonも勉強して行こうと決めました。

 

pythonは前述の通り、機械学習によく使われる言語となりました。

論文での実装も、pythonで書かれることも出てきており(もちろんmatlabもある)、機械学習を学ぶ上でも避けては通れないようになってきています。pythonの文法などを真面目に勉強するのはきっと退屈でしょう。ですから、以下の書籍を購入しました。

 

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

 

 

早速anacondaを導入してpythonでの深層学習開発に取り組んでいます。

pythonそのものに興味が出てきたら、それ自体を深く学ぶ機会もあるかもしれませんが、今はとりあえず機械学習を通して触れていこうかなと思っています。

 

機械学習をやるならpythonで良い

もしも機械学習をやりたいけど、言語をどれにしようか迷っている方がいれば、pythonで良いと思います。RやC++などもありますが、pythonで良いです。

理由は単純で、深層学習に関するライブラリがpython対応のものが多いです。

特に以下の代表的な3つのライブラリ全てに対応しているのはかなり大きいです。

 

・tensorflow

・chainer

・caffe

 

全部を使えるようになったほうがいいということではなく、やがてどれが主流になるときが来ても対応できますし、かつ、ライブラリの使いやすさが自分に合うものを選べるという利点もあります。特にchainerは日本発ですから、ドキュメントも日本語のものが多く困った時に対処しやすいかと思われます。

 

もしも機械学習のプロフェッショナルになるんだということであれば、どちらにしても様々な言語、様々なライブラリに対応できる必要が出てきます。そういう場合も結局はどれか1つから始めることになるので、それならば最初の1つはpythonということでいいでしょう。

 

機械学習を始める

pythonで機械学習を始める上で参考にした記事を載せておきます。

まずはanacondaでpythonの導入

qiita.com

acacondaには科学技術計算ライブラリであるNumPyが同梱されています。また機械学習そのもののライブラリであるscikit-learnと、グラフ化のライブラリmatplotlibも同梱されています。

極端な話、acacondaを入れさえすれば、機械学習の簡単な実験がすぐにできるということです。

とにかくこれを入れることから始めればいいです。ここの記事の通りやればすぐに導入することができます。難しそうに見えますが、書いてあることを実行すれば大丈夫です。

私はUbuntuを利用しているため、Linuxでの導入を上記の記事のとおりに行いました。

 

またプログラミングをする際にはエディターをどうするか迷う人がいるかと思いますが、結論を申し上げると、自分が使いやすければ何でもいいと思います。

 

anacondaにはspyderという開発環境が同梱されているため、anacondaを入れたならばターミナルでspyderと打てばすぐに使えます。

 

深層学習のライブラリをどうするか

ここに関してはまだ私が未着手なので、参考になりそうな記事を載せておきます。

調べている限り、深層学習を実際に試したいという人はchainerかtensorflowで良さそうです。

 

chainerは日本発なので、日本語のドキュメントが多いです。

一方で、ある意味日本で閉じた開発になっているかもしれません。

 

tensorflowは深層学習でトップを走るgoogleの提供で、おそらく世界中で使われているでしょう。

 

一方でTheanoというPythonのライブラリがありますが、こちらは深層学習に狙いを定めたものではありません。もっと一般的に、行列計算やGPUへの対応、自動微分の機能を搭載したものとなっています。こちらで実装を行おうと思う場合、ニューラルネットを簡単に扱えるようにしたライブラリでない分実直にアルゴリズムを理解する必要があります。

 

私自身matlabで実直にアルゴリズムをプログラムに落とす作業は行っているので、あとは深層学習のいろいろな手法を試したいという意味で、chainerかtensorflowを使おうと思っていますが、これは目的に応じてという形になるでしょう。

 

記事はこちらが参考になります。

qiita.com

 

qiita.com