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

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



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


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

2017年11月1日水曜日

Coursera: Convolutional Neural Networksコース開講

ようやくCouseraのDeep Learningシリーズのコース4であるCNN(Convolutional Neural Networks)が開講したようです。

以前コース1〜3までは受講してしまい、その続きとなります。UdemyのCNNコースで一通り学びましたが、復習も兼ねてやってみようかと。再登録というかたちになるのですが、料金($49)を支払ってのenrollというよりは、単なる聴講というかたちで覗いてみることにしました。聴講(無料)でも、講義の動画やプログラミング課題まではアクセスできるようです。ただし、字幕はまだ英語のみ。

CNNコースは:
Week1: Foundations of Convolutional Neural Networks/動画106分
Week2: Deep convolutional models: case studies/動画99分
Week3: Object detection/動画84分
Week4: Face recognition & Neural style transfer/動画79分

という構成になっており、各Weekでクイズやプログラミング課題があるようです。
後半の物体検知/顔検知/スタイル変換は面白そうです。

早速Week1の動画から見てみました。最初はConvolutionの基本原理となる、フィルター、パディング、ストライド、valid/sameなどの説明です。スタンフォード大のCS231n授業動画でも学べますが、やはり定評あるAndrew Ng先生の場合は丁寧に教えてくれます。抜け落としていた知識を補うためにもちょうどいい感じです。
実際コーディングする場合は、conv2d()などの関数を使えばすぐに実装できるのですが、Week1の最初の課題では、numpyを使ってフルスクラッチでConvolutionレイヤーを実装するようです。一旦仕組みを理解するにはよさそうです。2個目の課題からはTensorflowの関数を使っているので、より現実的な実装の仕方を学んでいくのだと思います。
Week2からのプログラミング課題はkerasを使うようです。

今後開講されるコース5:Sequece Modelでは、RNNやLSTMを学ぶようです。スタンフォード大学のCS230という授業がこのCourseraのコースと連携しているので、CS230のシラバスをみると、コース5は11/27以降というスケジュールになっています。

2017年10月3日火曜日

Coursera: Deep Learning/ コース2、コース3終了

引き続きCourseraのDeep Learningコースのコース2と3を受講しました。

・コース2(3週間):Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
・コース3(2週間):Structuring Machine Learning Projects

コース2においてはRegularization、Dropout、Normalization、ハイパーパラメータの調整、Batch Normなど、けっこう細かなテクニックを学びました。ニューラルネットというよりも、メインのモデルをより効率的に計算していくスキルといった感じです。これもまた実践的な場面ではよく用いられているテクニックのようで、すべてを完璧に習得したというわけではないのですが、それぞれがどんなものなのかということがわかったし、ディープラーニングの世界で用いられているボキャブラリーが増えてよかったと思います。
コース2の後半では、いよいよTensorFlowを用いたプログラミング課題が登場してきました。このままTensorFlowでどんどんプログラミングしていくのかと思ったら、そうでもありませんでした。いままではNumpyだけを使いフルスクラッチでプログラミングしていたけれども、TensorFlowのようなライブラリを使えば一行で済みますよという程度の内容でした。そうこうしているうちにコース2も終わり最後のコース3に突入してしまいました。

コース3ではもうプログラミング課題はなくて、1週ずつ最後に15問のクイズがあるだけです。しかしそのクイズが実際の現場でのケーススタディという設定で、ディープラーニングをつかったシステムを構築している際のデータセットの扱い方や様々なエラーの対処法などに関する問題です。
たしかにこのコースは理論的というよりも実践的スキルと知識を身につけて、すぐにでもこの業界に就職できるかのような教え方をしています。
当初は、ディープラーニングを使った様々なアルゴリズムを習得できると想像していましたが、中心となるアルゴリズム(モデル)に対する細かなテクニック(コース2で学んだ内容)のほうがどちらかというと重要という感じです。あるモデルをつくっても、それが機能するようにするにはデータの扱い方や様々な調整/最適化が必要で、この辺はなかなか独学だと身につけにくい部分かと思います。そんな感じでコース3もあっという間に終わってしまいました。

 コース2の修了書。

コース3の修了書。

結局、現在開講されているDeep Learningコースの1~3を1週間の無料期間内に終わらせてしまいました。前回、受講したMachine Learningコースと重なっている部分もあったので、1〜2週間分を1日で終わらせたというペースです。特にコース1の前半とコース3はすぐに終わってしまうので(動画を見てクイズに答えるだけ)、実質コース1の後半とコース2を数日かけて勉強すればいいという感じです。個人的にはコース2が一番勉強になりました。
1週分約2時間の動画を手書きのノートでメモをとりながら見続けるという感じです。動画を見ているだけだと覚えが悪いので、ノートをとったほうがその後動画を見直す回数もかなり減って効率が上がります。ただ問題は、日本語字幕はまだ準備されていない部分がほとんどなので、英語で覚えないといけないというところでしょうか。
前回、約1ヶ月ほどかけて受講したMachine Leaningコース(11週)のほうが内容が濃かったような気もします。Deep Learningコースは1〜3まで合わせても9週しかないし、そもそも初心者向きでもあるため、それほど大変な内容になっているというわけでもないような気がします。Machine Leaningコースは次から次へと面白いアルゴリズムがでてきてその都度わくわくしましたが、Deep Learningコースはより実践的というか、普段データサイエンティストの人たちがどのようなこと(地味な作業も含めて)やっているのかというのがわかりました。
やはりおすすめは、Machine Learningコース(11週:無料)を受講して、従来の機械学習で基礎を学んでから、その延長というか最近の動向にあわせたDeep Learningコースを受講する順番がいいかと思います。Deep Learningコースも初心者向けなので、このコースから受講してもいいとは思いますが、細かい部分まではあまり丁寧に教えてくれないという感じです。

Deep Learningコース4は一番興味あるCNNなのですが、まだ開講していないので、しばらくは他のコースでもまたのぞいてみようかなと思ってします。

2017年10月1日日曜日

Coursera Deep Leaning Specialization: Course 1 終了

CourseraのMachine Learningコースが終わってしまったので、引き続きDeep Learningコースを受講することにしました。このコースは$49/月の有料コースですが、最初の1週間はお試しということで無料です。前回のMachine Learningコースが充実していたので、1週間すぎて有料になっても構わないと思い、とりあえず登録してみました。


Deep Learning Specializationというコースで、大きくは以下のコースで構成されています。

・コース1(4週):Neural Network and Deep Learning
・コース2(3週):Improving Neural Networks: Hyperparameter tuning, Regularization and Optimization
・コース3(2週):Structuring Machine Learning Projects
・コース4(未定):Convolutional Neural Networks
・コース5(未定):Sequence Models

特に興味があるのがコース4のCNNですが、まだコース4と5は開講していません(そろそろ開講するらしいですが)。コース単体での受講もできるようですが、せっかくなので順を追って受講し、コース4までは到達したいと思っています。

UdemyのGANコース:
しかしながら、同時にUdemyの以下のGANのコースも気になっています。こちらも有料(1200円/割引価格)のコースです。
個人的にGANを使った画像生成に興味があるので、このコースを受講してみたいのですが、まだまだDeep Learningの知識やスキルも追いつかないと思うので、CourseraのDeep Learningコースが終わったら、このGANのコースも受講してみようかと考えています。

以前から独学で機械学習を学んでいたけれども、このようなオンラインコースを受講したほうが理解が早いということが、前回のCoursera Machine Learningコースで分かったので、興味あるコースをいろいろ調べています。書籍で勉強してもいいのですが、書籍だとおそらく途中で投げ出してしまいそうなのと、こういった専門領域の書籍は値段的に結構高いので、必要以上に書籍は購入しないようにしました。情報的な内容に関しては、論文なども含めてかなりネットからも入手できるし、わざわざ専門書を買うまでもないかと。それとこのようなコースだと知識だけでなく、プログラミングの課題もあるので、理解というよりも実践的なスキルが身につくような気がします。


Coursera コース1(4週):Neural Network and Deep Learningを開始
ということで、早速Courseraのこのコースを開始してみました。Week1は概要やこのコース自体の説明などで、特にプログラミングするなどの技術的なことはしませんでした。前回受講したMachine Learningコースとも内容が重なる部分もあるので、さらっと聞き流す感じでも大丈夫でした。同じように動画途中でのミニクイズがあり、Week最後にあるクイズは前回のコースでは5問でしたが10問(8問以上正解で合格)に増えていました。このクイズが結構難しくて、というのも英語なのでよく読まないとすぐに間違ってしまいます。前回のコースでも何回もやり直しました。
Week2からようやく実際的な内容に入っていくわけですが、前回のMachine Learningコースで学んだ内容と重なっている部分も多いという感じです。
ただ今回のコースはPython(Jupyter Notebook)、Numpyを使うので、それに合うアルゴリズムになっているのか微妙に違います。個人的には、Numpyよりも前回使っていたOctave言語のほうがシンプルで分かりやすいという印象でしたが、Numpyにも慣れるという意味で前回の復習も兼ねてすすめてみました。前回のコースのおかげか、Week2まではあっさり終わってしまい、残すところWeek3とWeek4だけです。
Week3からより本格的にニューラルネットワークの勉強です。それと同時にNumpyに則した行列計算方法や偏微分の説明が何回も出てきます。Week最後のプログラミング課題はブラウザ上でJupyter Notebookを使うので、以前のコースよりも便利になったという感じです。相変わらず数行を穴埋めしていく課題なので難しくないのですが、PythonやNumpyには慣れていないと記述の仕方がわかならくなるときもあります。そうやってNumpyにも慣れていきつつ、Week4に入ってしまいました。
この週で最後、複数のレイヤーを持つニューラルネットワークの実装です。相変わらずバックプロパゲーションは面倒で、前回のコースでもやったので原理は分かるのですが、複数層に対応できる一般化した式をいざNumpyで実装となるとけっこう大変でした。前回のコースでもフォワードプロパゲーションとバックプロパゲーションを復習しておきたいと思っていたので、今回Numpyで試してみてまたさらに理解が深まったという感じです。
Week4の最後のプログラミング課題は、一旦計算した値をキャッシュに記憶させておいたり、連想配列のようなディクショナリに変数を登録しておいたりというテクニックを多用しているので、このへんが慣れなくてForumを覗いてなんとか実装することができました。Numpyにおける、forループを使わない行列計算の方法、ブロードキャストなども慣れていないので、Deep Learningの内容というよりはNumpyについてももう少し勉強が必要という感じです。


コース1(4週):Neural Network and Deep Learning終了
無料期間(1週間)ということで試しに受講してみましたが、3日くらいで終わってしまいました。前回のMachine Learningコースを受講していれば、Week1と2は聞き流す程度でもいいと思います。実質、Week3とWeek4をやればいいのかもしれません(それぞれ1日ずつ)。
成績は94.4%です。プログラミング課題はすべて100%で提出しましたが、クイズ(10問中8問正解で合格)のやり直しはせず、そのままどんどん先に進んで行った結果です。もう少し理解を確実にするために復習は必要だと思いますが、次のコース2も受講し始めてしまいました。早くCNNやGANまで進みたいため急ぎがちになってしまいますが、そもそも機械学習やDeep Learning自体が面白いのでついつい次へと進んでしまいます。


受講してみての感想:
このコースは初心者向きらしく、その分前回のMachine Learningコースを受講した人にとっては物足りないかもしれません。コース5まである最初のコースなので基礎的内容が多く仕方ないのかもしれませんが、その後に控えているコース2〜5に期待したいところです。
個人的には、前回のMachine Learningコースがあまりにもよかったことから結構期待していたのですが、前回ほどすごいという印象ではありませんでした。教え方も前回のほうが丁寧だったような気がします。しかし、それは機械学習(従来の方法)とDeep Learning(最近の方法)という範疇の違いから、そうなるのかもしれません。初心者向けなので機械学習に通じる基本を一通りおさらいしつつ、すぐにDeep Learningに入っていくという感じなのかもしれません。たしかにどんどん複雑になっていくので、基本にばかり時間をさいていてもダメなのかもしれません。
ただし、実践力を身につけるという方向性は変わってはいないと思うので、すぐにも役立ちそうなスキルをどんどん教えてくれると思います。
日本語環境はまだそれほど整っていないので、英語に抵抗がある人にはきついかもしれません。しかし数式やソースコードが読めれば、英語が多少分からなくてもなんとかなるとは思います。

コースの修了書を受け取るためには本人確認書類をCourseraに送付しなければいけません。日本語で記載されている運転免許証の画像を送ったのですが大丈夫でした。一晩たってから、このコース修了書が送られてきました(実際は名前も記載されています)。無料期間でも修了書を発行してくれるようです。

続き:
Coursera: Deep Learning/ コース2、コース3終了

2017年9月27日水曜日

Coursera:機械学習コース終了

先月の8/26日にCourseraに登録して、11週あるコースでしたが、32日間でMachine Learningコースを終えました。やはり、評判通り非常に勉強になるコースでした。
教え方が上手であるとか、細かく指導してくれるとか受講者の声が書いてありましたが、まさにそうだと思います。途中その他のコースをちょっとのぞいてみたけれども、やはりこのコースがどれだけ優れているかわかりました。しかも無料でここまでの内容を受講できるというのはすごいことだと思います。以前、ネットを頼りに機械学習を独学していましたが、やはりこのようなコースを受講したほうがずっと早いという感じです。優れた書籍も数多くあると思いますが、書籍を使った勉強だとタイムリミットがないため挫折も多くなってしまいます。人にもよりますが、個人的にはこのようなコースのほうが勉強もはかどりました。
このコースはプログラミングもしながら数式を理解できるので、いままでブラックボックスになっていた部分がかなりはっきりしました。オクターブ言語については、行列計算を楽にしてくれるツールという感じで、今回はじめて使いましたが、すぐに慣れて特に問題ありませんでした。
このコースのいいところは、それほど予備知識なくても一通り機械学習について勉強できるというところだと思います。通常、書籍など買い込んで(買い込んで終わりになってしまうパターンもよくある)で予備知識を得てから学ぶという手順になることが多いとおもいますが、そういった余計な書籍も必要とせず進められました。時間的にも金銭的にも一番ショートカットできるコースだと思います。
やはり教え方が上手いというか、分からない人に分からせようとする熱意みたいなものが感じられます。例えばWikiなどで機械学習について調べてみると、数学的に正確に詳しく書かれていたとしても、分からない人に分からせようという配慮ある表現ではないため理解に苦しみます。このコースは解説がとてもわかり易く(初心者が勘違いしそうな部分は何度も説明してくれたり)、クイズやプログラミング課題も適度な難しさがあって、初心者にとってどの部分を鍛えるのが一番効率いいか分かっているような教え方だと思います。


前半はコースの仕組みやオクターブ言語、そして機械学習そのものにも慣れずにそれなりに時間かかりましたが、後半はかなり順調に進み、授業内容もどちらかというと応用的な方向に移行していったので、思ったより時間がかからず一気に最後まで行ってしまいました。最後の2週は、プログラミング課題もないのですぐに終わってしまい、いきなり今後の楽しみが減ったというか、TV番組の最終回のように少しさびしい感じです。

線形回帰、最急降下法、ロジスティック回帰、正則化、ニューラルネットワーク、サポートベクターマシン、K-平均法、次元削除、PCA、異常検知、強調フィルタリングなどいろんな種類を学びました。複雑な数式も理解できるようになったのはよかったです。

やはりWeek5のバックプロパゲーションまでが大変という感じです。その後は、これまでの内容をベースに応用的に発展させたり、デバッグや評価、あるいは実際のプロジェクトを模倣した演習課題と移行していくので、前半に学んだ基本原理をどのような場面でどのように使うかということも学ぶことができて非常にためになります。

今後は、個人的にはCNNやGANに興味があるので、同じCourseraのDeep Learningコース(有料:$49/月)を受講してみようかと考えています。ここでDeep Learningを学んで、その後はできればGANのような画像生成に進んでいけたらと考えています。

続き:
Coursera Deep Leaning Specialization: Course 1 終了

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

2017年9月8日金曜日

CourseraのMachine LearningコースとDeep Learningコース

前回のRaspberry Pi Zero Wのリチウムバッテリー化が中断しているのは、CourseraのMachine Learningコースに多くの時間がとられているためでもあります。


以前から、人工知能には興味があったので、ネットで調べながらTensorFlowなど試してはいました。サンプルを試してみると面白いのですが、細かな設定や自分なりに工夫してコードを書くということになると、基本を知らなければ、このライブラリ自体がブラックボックス化してしまい、それ以上活用することができなくなってしまいます。

個人的には機械学習やディープラーニングで何をしたいかというと、DCGANをつかった画像生成です(TensorFlowをつかったDCGANもできるらしい)。これは何かを解析したり分類したりするというよりは、学習させた画像をもとに、複合的な画像を新たに生成することができるようなので、やや創造的な行為に近いところもあり気になります。
ただ、一気にこのアルゴリズムを理解するには基礎知識がなさすぎなので、きちんと最初から勉強してみようと思ったわけです。当然、基本がわかっていないと機械学習の説明やサンプルコードを見ても、何がなんだか分からなくなってしまいます。

いろいろと検索していると、CouseraのMachine Learningオンラインコース(無料)が評判いいので受講してみようかと。さらには最近同じAndrew Ng先生のDeep Learning(deeplearning.ai)コース(有料:$49/月)も出来たようです。
おそらくこちらはもっと本格的なので、まずは基本からきちんと学ぶということで(無料でもあるし)、Machine Learningコース(11週)をやってみることにしました。Couseraにはその他にもたくさんのコースがあるので、ネット検索で必要な情報を得ながら独学してもいいのですが、このような無料(一部有料の場合もあり)のオンラインコースを利用したほうが効率がよさそうです。

Machine Learningコース(11週:無料):
一週間単位で次のステップに進んでいきます。現在3週目が終わろうとしています(あとはプログラミングの課題を提出するだけ)。毎週日曜日が締め切りなのですが、それまでにトピックごとの授業動画(一つ10分程度を複数)を見て、途中に出題される4択ミニクイズ、トピック最後に出題されるテスト(5問:4問以上正解で合格)ならびにプログラミングによる課題を提出します。受講と言っても、実際に講師と何かをやりとりするわけではないので、自分のペースで学んでいくことができます。いちおうForumがあるので、もしどうしても分からない部分があれば質問すればいいという仕組みです。
無料コースなので、タイミリミットはあるとは言え、遅れてもとくにペナルティがあるというわけではありません。あるいは、どんどん先にすすんでいっても構いません。
授業自体は基本英語ですが、動画には日本語字幕もあるので、英語でよくわからなければ日本語訳に切り替えて、再度動画を見るという感じにしています(復習も兼ねて)。ただ、専門用語が日本語化されると、微妙にニュアンスがかわって、かえってわかりづらいということがよくあります。テストの出題は英語なので、できれば用語などは英語で覚えたほうがいいような気がします。

コースの難易度:
最初の1週目や2週目は入門という感じでやさしいのですが、3週目からは少々難しくなってきました。ただ、内容は高度になっていくとは言え、どんどん便利なアルゴリズムになっていくので面白さと関心度が高まっていきます。やはり説明動画を何回か見て、途中に出てくる公式もその場で覚えていかないとダメと言う感じです。動画を一回みただけだと(10分間程度の理解)、概要を把握するだけになってしまい、覚えた内容をすぐにコード化できるかというと、そうもいきません。つまり、プログラミングできるレベルまでの理解を得るには何回か動画をみたり、ひとつ前に遡ったりしながら、ある程度の反復作業が必要という感じです。見たり読んだりするだけでなく、手書きのノートで覚えていったりしたほうがよさそうです。

Octaveという言語:
例えば、3週目の授業は合計すると3〜4時間あれば終わることになっているのですが(つまり一日30分程度やれば済むという計算になる、場合によっては1日で終わらせることもできる)、きちんと理解するには、その2〜3倍の時間がかかりそうな気がします。個人差にもよるのですが、ある程度復習したり、本や他のサイトなどで理解を深めていかないと、本当に身についたかどうかが怪しいという感じです。実際身についたかどうかは、プログラミング(Octaveという言語で)で書けるかどうかでも確かめることはできると思いますが、Octaveの使い方もある程度平行して勉強しないといけません。Octave自体は難しくないのですが、ちょっとした癖があるので、最初のうちは間違えないようにしないといけないと言う感じです。Octaveだとforループをつかわずに行列計算ができるので便利です。スマホにもOctaveが使えるアプリがあるので、簡単な演算などの練習はスマホで試したりもしています。

学習のペース:
ちょっと数日休んでしまうと、すぐに締め切り日が来てしまうので、毎日少しずつでもいいからコツコツやったほうがよさそうです。継続的に毎日やれば、それだけ頭にも入ってくるので、短期間に何かを覚えるなら、多少時間に追われながらでもやったほうがよさそうです。
コースはスマホでも見ることができるので、電車の中で勉強することも可能です。そうやって暇な時間を使って勉強していくこともできます。大学で数学をやっていたとか、仕事でこのようなことをやっているのであれば理解は早まるとは思いますが、専門領域でもない人にとってはきちんと理解するためには、多少まとまった時間を設けたほうがいいと思います。

まとめ:
おそらく人工知能や機械学習に関心を持っている人は多いと思います。機械学習についての概要を説明してある記事などを読んで、なんとなくどんなものなのかということを理解するまではいいのですが、突然複雑な数式が出てくると急に敷居が高くなって、その手前でやめてしまう人も多いと思います。個人的には、数学は高校以後ほとんどやっていませんが、プログラミングを通して、そのつど必要な計算方法を身につけていった感じです。つまり数学的な数式はあまり得意ではないのですが、それをプログラミングコードに置き換えてあれば理解しやすくなります。
しかし、数学やプログラミングのどちらもやったことがないとなると二重苦で難しいのかもしれません。さらには、Courseraの場合基本英語なので、英語も苦手だと三重苦になるのかもしれません。
とりあえずコース3週目までにも一見複雑な数式はいくつか出てきましたが、どんなことがなされているのか理解していくと、その数式の意味もわかってきました。複雑な数式を見ることにも慣れてきたと言う感じです。
機械学習を学ぶ上で、ネット検索すればたくさんの情報が見つかるので独学も可能ですが、その多くは概要的な説明であったり、要点をまとめたメモのようなものであったり、必ずしもこれから学ぶ人のための記述にはなっていないので、教えることに主眼をおいたCourseraのようなコースのほうがいいと思います。

次週(4週目)からはニューラルネットワークなので楽しみです。以前パーセプトロンまでは独学したのですが、多層パーセプトロンあたりから中断してしまっていたので、ここの壁を乗り越えられればと思っています。ニューラルネットワークあたりから面白くなってくると思うので、この機会に理解を深めておきたいと思います。

関連:
機械学習/Deep Learningについて

人気の投稿