これまでのあらすじ:
2016年3月、フェルト生地を手で裁断している際にレーザーカッターがあれば複雑なカットが容易にできるなあと思って、安価になってきたレーザーカッターを購入しようと思ったのがきっかけ。調べていくうちに、合板も切れたほうがいいと思うようになって、CNCルーター(CNCミリング)についても考えるようになった。
Arduinoは以前から使っており、CNCシールドがあると気付いて自作も可能と思うようになった。当初はShapeOkoやX-CARVEを参考にMakerSlide、OpenRail、V-Wheel、2GTタイミングベルトなどで5万円くらいで自作しようと思っていた。AliExpressでも部品が安く買えることが分かって、しばらくは部品探し。探せば探すほど安くて本格的な部品も見つかってくるので、そんなにケチらなくてもいいのではないかと徐々にスペックアップ。最終的には剛性や精度のことも考えてボールスクリューやリニアスライドを使うことになり、予想以上に重厚な3軸CNCマシンをつくることに(約7万円)。
構想から約5週間(制作約3週間)でルーターとレーザーともに使えるようになり、現在はgrbl1.1+Arduino CNCシールドV3.5+bCNCを使用中(Macで)。余っていたBluetoothモジュールをつけてワイヤレス化。bCNCのPendant機能でスマホやタブレット上のブラウザからもワイヤレス操作可能。
その他、電子工作・プログラミング、最近は機械学習などもやっています。基本、Macを使っていますが、機械学習ではUbuntuを使っています。


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



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

機械学習・Deep Learningについて

機械学習は専門領域ではないのですが、ここしばらくDeep Learningに興味があります。現在も学習中で、以下はそれに到るまでの経緯です。


経路探索アルゴリズム:
AIっぽいアルゴリズムとして、迷路などを経路探索するアルゴリズムがあります。RPGゲームではよくある場面ですが、マップ上の障害物を避けながらクリックした目的地まで最短距離で自動で歩いてくれるという感じです。そのなかでも有名な「A*経路検索」というアルゴリズムが昔から気になっていたので試してみたのが始まりです。


実装してみると勉強にはなりましたが、それ特有のアルゴリズムという感じで、挙動は賢そうに見えるのですが、まだまだAIという感じではない印象でした。


線形回帰:
そこで本格的に機械学習を勉強してみようと思いネットで検索すると、まずは線形回帰がヒットしたので、基本的な原理ではありますが試してみました。


ここで勾配法や最小二乗法というものを学び、数学と言えば解析的に答えを求めるというイメージでしたが、近似式で徐々に求めたい式や数値に近づいていくというアルゴリズムに興味を持ちました。


Coursera:
その後パーセプトロンを独学しようとしましたが、機械学習を始めるにはCourseraのコースがいいという評判を聞き、オンラインスクールというものを試してみることにしました。通常は、アマゾンで書籍を買いあさり独学していく感じですが、それだと挫折してしまうこともよくあるので(本を買っただけで満足してしまう)、オンラインスクールで多少プレッシャーを与えながらやってみようかと。


締め切りのある課題提出など面倒かなと思っていましたが、内容が面白いのでスムースに勉強していけました。書籍やネットの情報を頼りに独学するよりもはかどりました。
無料のオンラインコースもけっこうあるので、以下なども試してみました。


Courseraの機械学習コース(無料)は非常に優れており約1ヶ月で無事修了することができました。


これで基礎的な機械学習の知識が身についたという感じです。パーセプトロンを独学していた頃はなかなか身につかなかったのですが、オンラインコースというシステムのほうが書籍で勉強するよりも効率がいいことがわかりました。
Courseraの機械学習コースは非常に勉強になったのですが、Deep Learningまではカバーされていないので、引き続きオンラインコースでDeep Learning関係を勉強してみました。


このDeep Learningコースは有料でしたが、トライアル期間中にすべて終わらせてしまったので実質無料でこのコースを受講することができました。前回の機械学習コースと重複する部分も多かったことから、短時間で終わらせることができたという感じです。
まだ自力でコーディングは無理でしたが、Deep Learningに関する知識やテクニックについては以前よりもかなり詳しくなりました。それから、難しそうな数式を見てもけっこう読み解けるようになったのがよかったです。


その他のオンラインコースや動画:
機械学習やDeep Learningについてはある程度わかってきたので、元々興味があった画像生成にむけてもう少し応用力をつけようかと、またオンラインスクールや動画レクチャーを探し始めました。


この時点ではCNNやGANに興味があり、いろいろ情報を集めていましたが、やはりオンラインコースで学んだ方が早いのではないかということで、Udemyの1200円のコースを試してみました。これもまた書籍で勉強するよりは安いし早いのではないかということからです。


GPUノートパソコン購入:
しかしながら、CNNやGANをMacBook(CPU)でランさせると何時間もかかってしまうということから、Deep Learning用にGPU付きのパソコンを購入することに。そしてOSもUbuntuへ。


やはりGPUのパワーは圧倒的で、これでDeep Learningの環境も揃ったという感じ。あとは細かな環境を構築して使いやすいように改良していきました。



Tensorflow/Pytorch/ベイズ:
主には、TensorflowとPytorchでサンプルを試しながらアルゴリズムを勉強していきました。CNNはわかりやすいのですが、VAEやGANはまだまだ難しく、ベイズ推定の概念も出てきたので確率的アルゴリズムなども勉強してみました。



Jupyter Notebook/Matplotlib:
Jupyter Notebookを使うことが増えたのですが、Matplotlibが使いにくいので、それに慣れるためにもアニメーションの方法など探っていました。


Ubuntu 18.04:
その後、Ubuntu18.04がリリースされ、新たに環境を作り直しました。



KerasでVAE/GANを復習:
その後、やや置き去りになっていたVAEやGANの復習をKerasでやってみました。


ようやく機械学習を始めたきっかけでもあったGANにたどり着いたという感じです。やはり画像を扱ったCNNやGANをするにはGPUは不可欠だと思いますが、最近はGoogle Colabなどのクラウドを使えばCPUパソコンでも問題なく計算できるので、ますます便利になってきたという感じです。


Kaggle:
その後Kaggleに参加すると勉強になるというので試しにやってみました。Kaggleではコンペごとに参加者がアイデアやアルゴリズムについて掲載しているKernelsというページがあり、そこを見るだけでも勉強になります。ということでビギナー用練習コンペであるタイタニックから始めてみました。

Kaggle:TitanicをKerasで試してみる

作戦はいろいろあるようですが、ディープラーニングの勉強ということでKerasで試してみました。アルゴリズムの工夫だけでなく、データの前処理(欠損値の扱いなど)についても勉強になりました。特にデータ用ライブラリであるPandasの使い方を覚えられたのもよかったです。
そして引き続き、ビギナー向けのDigital Recognaizer(Mnist)もやってみました。

Kaggle:その2(Titanic、Mnistなど)

Mnistばかりだと退屈かもしれませんが、いざ精度をあげようとすると工夫すべき点はいろいろあり、改良していくごとにKaggleにおけるランキングがあがっていくのでゲームのハイスコアを狙うかのようにやり始めました。おそらくKaggleに参加しなければMnistなどは数回試して終わりになってしまいますが、こうやって少しでもスコアを伸ばす工夫をしつこくやり続けると知らなかったテクニックなどが身についてかなり勉強になります。
その後、ハイパーパラメータをいじっては提出の繰り返しでしたが、自動でやってくれるライブラリもあったので試してみることに。

Auto-KerasでKaggle:Digit Recognizer(Mnist)を試す

これをきっかけにハイパーパラメータの自動化でなんとか少しでもスコアが上がらないかとさらにモチベーションがあがりました。これは以前試したベイズ最適化にも関係しているのでこのサンプルで効果を出したいところ。

HyperasでDigital Recognizer(MNIST)を試す
Hyperopt:Digital Recognizer(MNIST)のハイパーパラメータの最適化
GPyOpt: Digital Recognizer(MNIST) CNN Keras ハイパーパラメータ最適化
Kaggle Digital Recognizer(MNIST): Hyperopt + Data Augmentation
Kaggle Digital Recognizer(MNIST): Keras, fit_generator() + hyperopt

最後のHyperoptとKeras fit_generator()の方法でスコアランキングがトップ5%までに向上しました。おかげでKerasの使い方にもより詳しくなってきました。
これまではサンプルを動かしてみる程度の遊びでしたが、実際よりよい結果を得るためにはそれなりの知識や理解力も必要となってくるので、そういう意味でもKaggleはモチベーションがあがるいい場所かもしれません。

その後もKaggleをやり続けようと思っていましたが、ちょうどクリスマス時期に「巡回セールスマン問題」のコンペがあり、機械学習やディープラーニングの分野ではないのですが面白そうなのでやり始めました。これはこれで面白かったので以下にまとめてあります。

TSP:巡回セールスマン問題について


0 件のコメント:

コメントを投稿

人気の投稿