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

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



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


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について

0 件のコメント:

コメントを投稿

人気の投稿