こんにちは、suzu6です。
この記事はTechCommit Advent Calendar 2019の7日目です。
6日目はFukkuさんの【Todo】いまさらNuxt.jsに入門したエンジニアの話でした。フロントではVue.jsの盛り上がりに乗って、Nuxt.jsを使う方も増えてきましたね。このブログもNuxt.jsを使って作ったものです。フロントエンドとサーバサイドを合わせてすごくシンプルに書けるのでオススメです!Fukkuさんの入門記事を読んで試してみてもらえると嬉しいです^^。
趣旨
この記事では、社内のプログラマ向けにAIの勉強会を開いた話をします。 対象はプログラマとして数年以上活躍してるけど、AIについてはWEBの記事読んだ程度の方です。 勉強会を開いてみてどうだったか?や気付きについて書きます。
この記事でプログラマは、システムエンジニアやマネージャー職でもプログラムが書ける人を指してます。
発表者(私)
仕事はインフラよりのプログラマです。
- 大学でSVM(=機械学習の一種)を使ってました。
- Deeplearningについては就職してから本を読んで勉強してきました。
対象
社内の現役のプログラマの数人と営業の人。
- AIについてはWEBなどの記事読んだ程度
- Pythonは初めてですが、他の言語は複数言語使える
- 数学は弱め。数式が出ると頭痛くなる。
微積分や行列を知らない・忘れた人ばかりだったのでどう説明するか悩む。
発表した内容
現時点で「AIの概論」と「Neural Networkのハンズオン」の2回勉強会を開きました。
数式は控えめに、どういった動作をするかとコードを見て理解してもらうことを心がけました。
AIの概論
「AIの概論」はAIの歴史からどういったことが出来るの?といった内容です。 まずは、AIについての認識を共有するところから始めました。
- AIのブーム、ダートマス会議やチューリングテスト
- AIとは?から機械学習の分類(教師あり、教師なし、強化学習、回帰、分類)や特性
- DeepLearingが広まったきっかけ(ILSVRC2012)
- 最近の研究結果で面白いものの紹介(DeepFake、物体認識のYolo、かくれんぼAI)
といった内容です。 発表に3時間かかった。。。
こちらのスライドはいろんなところの図や文章を切り貼りしているので、いまのところ公開は控えますm(__)m。
Neural Networkのハンズオン
AIを作ってみたい!との声があったので「Neural Networkのハンズオン」を開きました。 説明用のスライドとホワイトボードと動かせるプログラムを書いて臨みました。
スライドはこちら
ゼロから作るディープラーニングを参考にスライド形式にした内容です。
また、誤差逆伝播はNVIDIAのスライドを利用させて頂いて説明しました。
プログラムは書籍のコードがgithubで公開されており、そちらをお借りしてGoogle Colaboratoryで動かせるよう調整しました。
実際に用意したコード
- ニューラルネットワークを使って精度を出すところまで
- MNISTを2層のNeural Networkで学習する
- Kerasで実装したサンプル メニューの「ファイル」「ドライブにコピー」すると自由に書き換えて実行できます!
発表してみてどうだったか?
本題です。
AIって興味あるけど難しそうが解消された
AIと一口に言ってもアルゴリズムは多岐に渡りますし、気になるけどどこから手をつけたらよいかわからない状態でした。 勉強会を通して全体像が伝わり実際に動かしてみたことで、とっつきにくさが解消されたかなと思います。 まだ私も含めて入り口にたったばっかです。 ただ、手を動かすところのハードルを一緒に超えられたので、これからみんなで情報の共有や議論ができそうです。
早速、ゼロから作るディープラーニングを買って勉強してみようとしてる人もいます^^。
データの準備が大事ってことが伝わった
勉強会を開く前はいろんなこういうの作ってみたいとアイデアはもらえるのですが、「そのためにはこういうデータがたくさん必要で集めるのも大変だよ」というのがピンときていないようでした。
概論のところでどういった学習方法があるかや、NeuralNetworkで実際に学習と推定のプロセスを見てもらったことでそのあたりのニュアンスが伝わりました。
「こういうのしたいよね」から一歩進んで「こういったデータ集めないといけないから、公開されているデータを探そう、集め方を考えよう」と考えてもらえるようになりました。
プログラマはPython知らなくてもなんとかなる
Pythonの勉強から始めたほうが良いかなと思ったんですが、思い切って「Neural Networkのハンズオン」を開きました。 実際やってみると、Pythonの書き方で詰まったことはなかったです。 さっき説明したもの(活性化関数など)が、コードを見せると結構かんたんに伝わりました。 数式よりもコードのほうがわかりやすい!
心配してたNumpyやmatplotlibなどPythonのモジュールも、どんな入力と出力が何かを説明したらすぐに書き換えたりして試してくれたりします。
バグが多少あっても大丈夫(笑)
準備不足で、一部コードにバグがある状態(ミニバッチを仕込もうとして失敗した)で発表しつつ動くよう直してました。 すると、参加者全員がが、直した箇所を聞いたりエラー内容から各自手元のコードを修正してくれました。 初めてPythonのコードを見たはずなんですが、コードと読む力とバグを推定する力はすごいなー(笑)と思いました。。
試行錯誤することが出来た
機械学習ではパラメータやモデルを試行錯誤して精度を出していく過程があります。 ただデータを突っ込んで学習させたら良いわけではなく、その過程で試行錯誤することが必要です。 パラメータを変えて、実際に精度が変わる様子も体験してもらうと、熱中して試してもらえました。
最近では、データを渡すとビジネスで使えるレベルのAutoMLもある。 凄すぎて理解できない。
モチベーションが上がった
勉強会を開いて、私自身も含めて皆のモチベーションが上がりました。 統計は覚えたほうが良いよとも伝えていたら、機械学習だけでなくそちらにも興味をもってもらえました。 お客さん先に見せるデータや今のサービスでどういったデータを取るべきかなどの議論も活発になった気がします。 勉強と共有する雰囲気が社内に出来たことはとても良いことなんじゃないかと思います。
振り返って
AIについて勉強会を開くなんて自分には敷居が高いと思ってました。
実際に開いてみると、想像以上に盛り上がって好評を得ることが出来ました。
発表のための資料を作ると、内容を相手のレベルに合わせてどう説明するかを考えることになります。 分かってはいるけど説明できない部分は書籍やウェブの表現を探したり、数式を控えて説明するために図を作ったり、短時間で説明するために取捨選択と流れを組み立てることが必要でした。
当日は用意したスライドで流れを説明して、ホワイトボードで補足しました。 3時間×2回の長丁場でしたが、集中力が途切れず質問も飛び交って白熱しました。 この白熱した時間が疲れたけどめちゃくちゃ楽しかったので、今後も続けていきたいです!
中身がない感じになってしましたましたが、最後まで読んでいただきありがとうございます!
明日はMaaSaHeroさんの「なぜなに?ディープラーニング #2 機械学習に必要なライブラリNumpy」の予定です! よろしくお願いします!
成果物
実際に用意したコード
- ニューラルネットワークを使って精度を出すところまで
- MNISTを2層のNeural Networkで学習する
- Kerasで実装したサンプル メニューの「ファイル」「ドライブにコピー」すると自由に書き換えて実行できます!
参考
勉強会を開くにあたって参考にしたものです。
書籍
記事やスライドなど
全てでは無いので順次追記していきます。