grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


ラベル Udacity の投稿を表示しています。 すべての投稿を表示
ラベル Udacity の投稿を表示しています。 すべての投稿を表示

2017年9月21日木曜日

Coursera:機械学習/サポートベクターマシン

Courseraの機械学習コースを始めてからカリキュラム上ではWeek5ですが、面白いのでどんどん先に進んで現在はWeek7のサポートベクターマシンが終わったところです。全部で11Weekあるコースですが、このサポートベクターマシンでどうやら「教師あり学習」は最後のようで、次のWeek8からは「教師なし学習」へ移行します。

コース前半について:
これまでを振り返ると、コース前半は機械学習の基本となる線形回帰/最急降下法のアルゴリズムを学び、ロジスティック回帰、そしてニューラルネットワークと進みました。途中から過学習を防ぐ正則化という方法を学んだのが、非常に勉強になりました。
基本となる最急降下法の式は上↑のようになりますが(最初この式を見たとき、Σが式中にあるので難しそうなイメージでしたが)、以下の式のように上の式の最後の部分にλの式を追加すると(更に複雑になる)、

自動的に過学習を防ぐ効果があるようで、アルゴリズムとしては一層賢くなったということです。
このコース以前に独学で機械学習を勉強していましたが、ネット検索などすると最初の式は基本の式なので見つけられたのですが、さらなる応用として正則化の式を追加するところまでは、なかなか気づきませんでした。というか、初心者にとっては最初の基本の式だけでも充分勉強になっているので、そこで終わりにしてしまいがちです。やはりこのようなことは独学というよりはコースを通して徐々に蓄積していくのがいいと思いました。

しかしながら、登場してくる式はどんどん複雑になっていきます。独学だとこのような複雑な式が出てくると、先へ進むことをためらってしまいますが、コースの中では何回も登場してくるし、きちんと中身を説明してくれるので理解も深まりつつ、このような複雑な式を見ても驚かなくなってきました。

例えばこれ↑、上の式は正則化されたロジスティック回帰の式。一見複雑に見えますが、ロジスティック回帰でどのように計算しているのかわかっていれば(それほど難しい計算ではない)、特に問題ありません。しかし、その下はWeek4〜5のニューラルネットワークに出て来る式です(相当複雑)。ニューラルネットワークかつ出力が複数あるためΣがたくさん重なっています。これなんかは、独学している最中にネット検索して登場してきたら、大抵の人は見ただけで諦めてしまうと思います。確かにバックプロパゲーションの式も複雑だし、プログラミングで実装する際も面倒です。しかし、一旦プログラミングコードに置き換えると、どのような順番でこの複雑な式が計算されていくかが分かるので、より理解が深まります。このWeek5が前半で最も大変なところかもしれません。個人的にはプログラミングコードに置き換えることで理解が深まりましたが、プログラミングが苦手だとかなり苦戦するかもしれません。
以下が、Week5のバックプロパゲーションのプログラミング課題内のコード。
それぞれの変数を用意し、順を追って計算してくので理解が深まります。式と言っても変数には行列が代入されているので、行列のマトリクスが食い違うとエラーがでてしまいます。しかもニューラルネットワークの場合、バイアス項を追加したり、削除して計算しなければいけない箇所があり、そのまま行列を代入して計算すればいいというわけではないところが面倒です。このコードを実装するために数時間試行錯誤しましたが、その分覚えてしまったという感じです。

ちなみにプログラミング課題は、Atomエディタを使ってやっています。Octaveの課題ファイル、課題説明のPDF、そしてターミナルを分割した画面で同時に開けるので便利です。


Week7/サポートベクターマシン:
カリキュラムの予定より2週間ほど先回りして、教師あり学習の最後であるサポートベクターマシンです。
以前にサポートベクターマシンは少し見たことはあり、マージンを持った決定境界のある分類アルゴリズムという程度の理解でした。あまり線形回帰やロジスティック回帰との区別もできなかったので、特に面白そうとは思っていなかったのですが(直線で区切ることしかできないと思っていた)、サポートベクターマシンにカーネル法が加わると強力なアルゴリズムになるらしく、かなり使えるということらしいです。
しかし、前半の数学的な説明を聞いていると複雑な仕組みとなっているようだったので、先に進む前に、いろいろネットを通して調べたりしてみました。
どうやら数学的にきちんと理解しようとすると、ラグランジュの未定乗数法というさらに難しい概念が出てきて、それによってどのような仕組みになっているのかの理解は深まるのかもしれませんが、あまり理論的な部分に首をつっこむと時間ばかりとられるので、理論的な理解よりも、どのようなことができるのかというような使用法のほうに焦点をあわせていくことにしました。


UdacityのIntro to Machine Learningのサポートベクターマシン:
サポートベクターマシンの数学的な説明によって難解なイメージを持ってしまったため、ほかのコースではどのように教えているのだろうと、以前少しだけ受講してみたUdacityのIntro to Machine Learningのサポートベクターマシンの部分を見てみました。このコースを見るのはもうやめようと思っていましたが、今回は案外役に立ちました。
Lesson3がSVM(サポートベクターマシン)です。このコースのほうが初心者向けという感じです。実際コース内では、ミニクイズやPythonによるプログラミング課題も同時にこなしていきます。
プログラミング課題では、Pythonの機械学習ライブラリであるscikit-learnを用います。プログラミングでは予め用意されたコードに少しだけ書き足すという程度なので、それほどコーディングの勉強にはならないのですが、このライブラリでどのようなことができるのかということを試したりするので、なにができるのかということは分かってきます。当然SVM用の関数も用意されているので、わざわざフルスクラッチでコーディングする必要はありません。いくつかパラメータを渡してあげることで、すぐにカーネル法を使うこともできます。
カーネル法を使うと、こんな感じ↑で複数の領域を曲線で区切ることもできます。パラメータによって、アンダーフィッティング/オーバーフィッティングも簡単に調整できます。

Courseraの授業内でも言ってましたが、数学的な理解を深めなくてもライブラリを使いこなすことはできるので、より実践的な方向性を求めているならば、数学的な原理を追求するよりも応用のスキルを身につけたほうがいいと思います。使用例を見れば、どのようなことができるのかというイメージが湧くので、あとはどこを調整すればいいのかということもわかりやすくなってきます。
ということで、このUdacityのIntro to Machine LearningのLesson3/SVMを一通り見て、大体の概要はつかめたのでよかったです。


再度、Courseraのサポートベクターマシン:
大体のイメージはつかめたので、再度Courseraのコースに戻り、カーネル法から勉強再開しました。カーネル法によってサポートベクターマシンが複雑な分類も可能になるので、これまでの分類アルゴリズムとは違って面白く感じてきました。
しかし、この辺になると、フルスクラッチでSVMを実装するというよりも、便利な既存ライブラリを使って何が可能か、このパラメータをいじるとどうなるのかという、どちらかというと実践的な内容に方向性が変わってきたと言う感じです。
最終的なプログラミング課題もスパムメール判定アルゴリズムについてであり、SVMの仕組みについてというよりも、SVMを使ってどのようにメールの文章をアルゴリズムに組み込んでいくのかという内容でした。最初は難解なイメージがあったので、プログラミング課題も大変なのかと思ったら、案外そうでもなくてあっさり終わってしまいました。


まとめ:
おそらく、Week5のバックプロパゲーションまでが原理的な勉強で、その後は実装したアルゴリズムをどうやって評価するのか、あるいはより良いパラメータの探し方や検証の仕方など、実際に使うことができるようにするために必要な知識やスキルというものへ移行して行った感じです。当然より高度なアルゴリズムを開発することも大事ですが、その使い方や評価も同時にできなければ、有効な結果を出すことができないので、実践的側面についても学ぶことができたのはよかったと思います。

次のWeek8からは教師なし学習なので、さらに面白くなりそうです。やはり、教師あり学習は、答え合わせができるので、その分学習もしやすいアルゴリズムというイメージですが、答え合わせができない教師なし学習によるアルゴリズムにおいて、どうやって答えを見つけていくのか不思議な感じがします。
機械学習を学んでからは数学に対するイメージが変わりました。いままでは数学と言えば、便利な公式があって、長さを知りたければ三平方の定理を使ったり三角関数を使ったりと、求めたいものに応じて公式を使い分けていただけでした。このような計算方法はどちらかというと静的であって、最急降下法のようなコンピュータのループ演算によって動的に答えを導きだす方法を知ったときはかなり新鮮でした。さらには、公式に当てはめて計算するというより、世の中に存在するいろんな数式を部品のように自由自在に組み合わせて、面白い挙動を示すアルゴリズムをつくることもできるということもわかりました。どうしても数学は、これを求めるためにはこの公式が必要という感じで手続きそのものも規則的なイメージがありましたが、優れたアルゴリズムをつくる上でも、もっと自由に計算していいというのが分かってきて、数学もかなり創造的なんだと最近感じでいます。

2017年9月17日日曜日

UdacityのDeep Learningコース(無料)

今日(日曜日)は、Coursera(Machine Learning)のWeek4の締切日ですが、Week4とWeek5を一気にやってしまい、もうすでにWeek6に突入です。Week4からはニューラルネットワークで、Week5には難しいとされるバックプロパゲーションも登場してきました。
使用する言語であるOctaveにも徐々に慣れて来たのですが、いざ動画での数学的な説明をプログラミングコードに置き換えようとすると一筋縄ではいきません。というのも、動画は主に数学的な説明が中心であり、プログラミングとしてどう実装するかまでの説明はあまりありません。プログラミングに関しては、課題文にも多少手ほどきがあり、またサイトには課題ごとのResourcesページがあるので、それを読みながら実装していく感じです(この辺の説明文はすべて英語)。
やはり複雑な行列計算になるので、頭の中に行列のマトリクスがイメージできないとエラーばかりでてしまいます。数学的な数式をコード化するのはまたちょっとテクニックが必要という感じです。なので何回も再提出してようやくクリア。しかし、クリアしたからと言っても、完全に理解したかというと多少怪しいところもあります。なので、バックプロパゲーションについては、forループを使うコード、使わないコードの2種類を書いてみて試してみました。
以前は数式を見てもわからなかったし、当然数式の意味がわからなければ、コードを見ても分かるわけがなかったのですが、いまは見れば分かるというくらいには理解が深まりました。

Udacity: Deep Learningコース(無料):
予定より先に進んでいるので、またUdacityの授業のほうも見ていました。前回の「Intro to Machine Learning」と「Machine Learning」の2つのコースに関しては、概念を理解するにはいいかもしれませんが、プログラミングしながら学ぶという感じではないのでもうやめようかなと(そもそも無料なので辞めても構わない)。その代わりにUdacityにある「Deep Learning」コース(無料:3ヶ月)のほうが面白そうなので少し見てみました。
このコースはGoogleによってつくられたコンテンツのようですが、Googleのエンジニアっぽい人が講師です。やや真面目そうな感じで前述の2つのコースとは違います。レベルもAdvancedなので、ある程度機械学習をやってきた人が見る感じなのだと思います。
内容的には、基礎知識の説明が終わると、すぐにMNIST(手書き文字認識)、そしてデュープニューラルネットワーク、コンボリューショナルニューラルネットワーク・・・と進んでいきます。コンボリューショナルニューラルネットワークに興味があるので(そこまで行けるかわからないけれども)、やってみようかなと。ディープラーニングのコースとなるとだいたいが有料で、このコースだけは無料のため試して見る分にはいいかもしれません。

言語はPython、そしてJupyter notebook(iPython notebook)を使用して、GoogleなのでTensorflowライブラリを用いるようです。Tensorflowに慣れるにはいいかもしれません。Jupyter notebookは以前インストールしてあったので、そのまま使えました。一応細かい説明などしてくれますが、やはり上級者向けだけあって、どんどん先に進んでいきます。なんとなくTensorflowに触れておしまいというコースにも見えなくはないのですが。

現在進めているCourseraのMachine Learningコース(全11週)が終われば、できればディープラーニングへ移行していきたいと考えています。以下は有料ですが、今後の理解度によっては受講してもいいかと。
・Coursera 「Deep Learning」($49/月)
・Udacity 「Deep Learning」($399?)ナノディグリーコース


追記:
もう少しこのUdacityのDeep Learningコースを見続けて見ましたが、Deep Learningの概要を短時間で説明しているという感じでした。プログラミングの課題もいくつかあるのですが、その内容についての細かな説明などはなく、勝手に各自でパラメータを変えてみたりしてという感じです。Lesson3の中ほどでバックプロパゲーションも登場するのですが、約2分間でさらっと説明するだけです(以下がダイアグラム)。
どのような手順で演算していくかまでは説明がありません。ライブラリを使えばすぐに済んでしまうのかもしれませんが、その使い方の説明もないので、おそらくこのコースはざっくりとDeep Learningの紹介をしているレクチャーというかんじで、実際にプログラミングできるようになるためのコースではなさそうです。
Lesson4のコンボリューショナルニューラルネットワークまで見てみましたが、大まかな説明なので期待していたほどの収穫はありませんでした。やはり無料コースであるから、この程度なのかもしれません。
これに比べれば、CourseraのMachine Learningコースは、細かく計算方法まで教えてくれるので、プログラミングしたいという人にはいいと思います。もしくは、ディープラーニングを学ぶなら有料のコースのほうがいいのかもしれません。

2017年9月13日水曜日

Udacityの機械学習コース

前回投稿したCourseraのMachine Learningコース(全11週)を引き続き受講中ですが、Week4のニューラルネットワークは予定より早く終わってしまったので、先回りしてWeek5に入りました。

多少余裕ができたので、他にもこのようなコースがないかと検索していると、オンライン学習サイトとして、Couseraと競合しているUdacityというのもありました。以前はこのようなオンラインコースは、登録も含め面倒なイメージがあって試してみようとも思いませんでした(必要な知識やアルゴリズムなどはネット検索でも充分なので)。しかし今回、試しにCourseraを受講してみると、予想以上にためになるので、このようなオンライン学習サイトも悪くないなと思い始めました。

ということで、Udacityの中にも機械学習やディープラーニングのコースはいくつかあるので、試しにちょっとのぞいてみました。

Udacity:Intro to Machine Learning(無料:全10週間):
まずはこの「Intro to Machine Learning」というコースです。Introと書いてあるので初心者向けっぽいですが、いちおうIntermediate(中級者向け)となっています。
言語はPythonを使用、Pythonについての細かなプログラミング指導はないらしく、プログラミングの知識は多少必要なので中級者という位置づけなのかもしれません。それとできれば統計学の知識もあったほうがいいと言っています。そのためUdacity内の別のコースである「Intro to Descripitive Statisics」や「Intro to Inferential Statistic」も受講すれば手助けになると。
内容的にはこれまでの機械学習という感じで、ナイーブベイズ、サポートベクターマシン、決定木、線形回帰、クラスタリング・・・という流れになっています。

こちらもCourseraと同様に、動画を見て途中にクイズが挿入され、プログラミングコード演習もあります。CourseraのMachine Learningコースと比較すると、動画の画質やシステムそのものはかなり完成度があると言う感じです。
UdacityはGoogleやAmazonなどにも支援されているようで、さすがに潤沢な資金があるのかいろいろ工夫されている印象です。要点だけを説明していく真面目な大学の講義とは違って、ややカジュアルな感じで(たまにジョークなど入れながら)、TVの教育番組を見ているという感じです。楽しみながら(飽きさせずに)学んでいくという工夫がなされているのかもしれません(あるいはエデュテイメント:エデュケーション+エンターテイメントという感じなのかもしれません)。
動画は字幕があるものないもの、ばらつきがあります。日本語の環境はそれほど整っているとは言えません。英語の字幕はあるので、聞き取りにくい場合は英語字幕を手がかりに理解していくと言う感じでしょうか。

このコースは無料なので動画はYoutubeでも見れるようです。一つずつの動画は短いもので1分以内、長くても5分程度です。かなりテンポよく進んでいきます。このテンポの良さで、次の動画また次の動画とついつい見てしまい、気づくと1時間くらい経ってしまいます。延々と長たらしい説明を聞くよりはいいのかもしれません。このテンポの良さも工夫されている点かもしれません。

動画による説明の合間や終わりに、以下のようなクイズ画面が出てきます(画面が突然切り替わる)。

選択方式のクイズもあれば、数値を空欄に入れるタイプもあります。「SUBMIT ANSWER」を押すと正解/不正解が確認できます。不正解になっても特にペナルティなどはないようです。

さらにPythonによるプログラミング演習の画面にも自動で切り替わります。
ブラウザ上でPythonのプログラミングができて、「TEST RUN」を押せば内容を実行できます。Pythonは事前にパソコンにインストールしておく必要がありますが、このコースのために特に設定などせずにすぐに動きました。勉強している内容というよりも、このブラウザ内でPythonコードを実行できる仕組みに感心しました。
CourseraのMachine Learningコースの場合(Octave言語使用)、一旦サイトのリンクからプログラミング課題に必要なファイル群をダウンロードし、各自のエディタやターミナルを使ってプログラミングするという仕組みでした。課題提出はターミナル上からできるので、それほど手間はかからないのですが、ブラウザだけですべて可能なUdacityのこの仕組はかなり便利だと思います。

全体の10%くらいを一気に見てみましたが、Introというだけあって機械学習の予備知識なしで始められるという感じです。多少機械学習をやったことがある人にとっては、余計なジョークや冗長な説明が必要ないとも感じられますが、たまに抜け落ちている知識もあるので、とりあえず勉強してみる分にはいいと思います。UdacityもCourseraもスマホに対応しているので、アプリをインストールすれば、電車などのなかでも受講可能(受講というか普通に動画を見る感じ)です。


Udacity:その他のMachine Learningコース:
先程のコースとは別に機械学習なら以下のようなコースもありました。
強化学習や教師なし学習などのコースも別に用意されているので、もう少し内容を絞って勉強したい場合はこちらのコースがいいのかもしれません。

とりあえず、真ん中のMachine Learningコース(無料:4ヶ月間)をちょっと覗いてみました。
このコースは二人の男性が講師となって機械学習の基礎から教えてくれます。一人の講師が講義してくれるモノローグタイプとは違って、二人の講師がお互いに質問したり、つっこみを入れながらテンポよく説明していきます。やはり、講義というよりは教育番組と言ったノリでしょうか。ただ、その分やや早口の口語表現が多いので英語が聞き取りにくいかもしれません。ただし、しばらく聞いていれば、この人たちの声質に慣れてくるので次第に聞きやすくなってくるとは思います。内容的には、機械学習の初心者に合わせて細かい説明やクイズがあるのでわかりやすいとは思います。


その他の有料コース:
Udacityにもたくさんコースがあり、機械学習のほか、AI、ディープラーニングなどの興味を引くものとして以下。
AIだとこんな感じのコースがあり、レベルもAdvanced(上級者向け)で有料(1ターム/12週間/$800)。無料コースとは違ってナノディグリーという修了証が取得できるようです。おそらくシリコンバレーなどで働くIT関係の人たちが、ここでナノディグリーを取って即戦力となって先端技術領域で活躍できるようなプログラムになっているのかと。会社に入ってからいちいち新米に教育している暇もないので、このようなコースで事前に必要な知識とスキルを身につけておけということでしょうか。コースの説明を見てみても、このスキルを身につければ、最低でもいくらの報酬がもらえる仕事につけるということまで書いてあります。


そしてディープラーニングのコースだと、以下のような感じ。

特にDeep Learningのナノディグリーコース(有料:たぶん$399)は気になります。このコースはそれぞれCNN、RNN、GANなどに分かれた構成になっているので、特に興味のあるGANのコースは受講してみたいと思いますが、もうすでに受講締め切りしており、現在次回受講の予約を受け付けているようです。

講師の一人であるShiraj氏(上画像左)のYoutube動画はたまに見ていたので(このコースの動画だとは知らなかった)、どんな感じか予想できますが、Courseraのdeeplearning.ai(Andrew Ng)という選択肢もあり、お互いに競い合っているような感じに見えます。Udacityとしては、このDeep Learningコースは特に力を入れているのかもしれません。GoogleやAmazonの支援だけではなく、こういったYoutubeで人気のある人たちも巻き込んでより一層オンライン教育プログラムを充実させているようです。しかもかなりの経済効果もありそうです。もはや、教育コンテンツだけでなくエンターテイメントコンテンツ(エデュテイメント)という感じです。


感想:
いろいろ目移りしても仕方ないので、Courseraのコースが終わったら、つぎにどうするか考えてみようと思います。ノリとしては、やや真面目路線のCourseraのほうが好みですが、Udacityのような試みも気になるところではあります。コースの受講内容というよりは、何かを学ぶというスタイルが徐々に変化/進化していて、従来のような書籍(教科書)を購入して学ぶという方法、学校に通って学ぶという方法は、もはや必要ないのかもしれません。
日本国内にもこのようなオンライン学習サイトはありますが(以前Node.jsをドットインストールの動画を見て学習したことがある)、まだまだボトムアップ的な内容が多いようで、ディープラーニングなどのようなコンテンツはあまり見かけたことはありません。やはりこういうコンテンツはアメリカのほうが進んでいるのでしょう。

CourseraやUdacityは魅力的なコースが多いのですが、やはり日本人にとって問題となるのは英語でしょうか。特にプログラミング関係は元々英語表記なので、この際日本語を忘れて(英語の勉強もかねて)、普段から英語を使ったほうがよさそうです(いちいち頭のなかで日本語訳しないようにする)。英語における文学的なニュアンスは難しいと思いますが、このような理系の説明であれば、専門用語以外はそれほど難しい表現もなく端的で明快な英語なのでわかりやすいほうだと思います。特にプログラミングの場合は、コードや数式があるので、それらを見ていけば大体理解できると思います。

人気の投稿