人工知能

人工知能・機械学習の研究、AI班の活動に関する記事です。

全くの初心者からの機械学習ロードマップ

この記事はKCSアドベントカレンダー第15日目の記事です!

おはござー!おはござー!おはござー🌻!

ぼく(リンク先:Twitter)自身の記事としてはおよそ1.5年ぶりとなります.12月も中程に差し掛かり学部3年ということもあって研究室選定で右往左往しております.

何かしら技術系の記事を書こうと思っておりましたが,そのネタはコミケ95での部誌に回すとしてここでは自分の1年間の自分語りにしようかと思います.オタク,自分語りしがち.

KCSはいくつかの班に分かれて活動しているのですが,ぼくはAI班とBlender班で主な活動を続けておりました.AI班自体の発足は結構前からあるようですが,ぼく自体がAI班に入ったのは今年度に入ってからですので,おおよそ9ヶ月程度の機械学習を学び始めてから経つことになります.

9ヶ月前までは二進も三進もわからなかった状態から,どのように機械学習の勉強を続けていったのか,その過程を共有することで,同様の立場にいるような人(いるのか?)の助けになれば幸いです.

図です

機械学習関連以外のことは灰色で示しました.

勿体ぶる必要もないので時系列順にやったこととその感想とかを紹介します.

3-4月 Python機械学習プログラミング

81kHmZ62+nL

Amazon

まず第一に,技術書を買った際に自分の手ですべて実装することを目標にしました.何かしらの言語を学ぶ際に,何に応用できるのか,これを覚えて何になるかといった視野を持つことにしています.C++を学ぶ際,クラスやオブジェクト指向,C++11のshared_ptrといったとっつきにくい概念から,どのように実活用されるかなどが全く把握できず仕舞でせっかくのプログラミングに対してやる気が全く出ずに,そのうち習慣が自然消滅してしまうといったことが多々あります.ぼくの場合には「機械学習」を学び「Webアプリケーション」を作りたい.スキルを活かせる「バイト」をしたい等,の目標を定めました.

この本では,機械学習で使われるSVMだとかK-meansだとかのアルゴリズムをある程度網羅的に,なおかつコード量も豊富に記載されており,Pythonと統計学,機械学習を万遍無く学べる良い本でした.無から有を生み出せそうな良書です.

また,TwitterのFF内間で日報/日記を付けるムーブメントが流行っているように見えたことから便乗して,ぼく自身もこの時期から日記/ブログをつけ始めることにしました.

進捗だめです

他人に見せるという体で学んだことをまとめ上げるという行為は,

  • 知識を言語化することで学習の反芻を行え,知識の定着が向上する
  • 他人に見せるための文章を書くことで,自己完結しない知識の表現方法を行える
  • 他人からも「○○ちゃんのブログは為になるなぁ!」とかレスポンスが貰えて習慣化が期待できる

といった役に立つことが盛り沢山だとおもいます.なのでこれを見ている皆さんも日記を付けてください.付けなさい!付けろ!!!

3-5月 Coursera

皆さんはCourseraというサイトを御存知でしょうか.

 

…では,AIdemyという動画教材による学習サービスサイトは聞いたことはありますでしょうか.

 

おそらくAidemyなら聞いたことがあるという方が多いのではないのでしょうか.

国内では個人的にはあまり聞かないの(僕主観ではの話を国家レベルに拡大するな)ですが,動画で学習ができて,なおかつ,時たま出されるプログラミング課題に回答して,全講座を終了させることで,修了証を貰えてLinkedIn等のサイトそれを貼ることで俺ツエーできる様になるというサイトです.動画講座自体は無料で閲覧することが可能であり,実際に演習を行うという場合でも月間6000円弱でコース内の全教材が利用可能となります.

同期で同じクラスのモヤシ炒め界の申し子でUCDavisのK氏がやってたことに便乗してAdvanced Machine Learning Specialization という全40週弱ある講座を申し込みました.しかし,大学が始まった事による忙しさの変化により,思うように進められなくなってしまったため途中で断念しています.しかしながら,機械学習の実力(と,あわよくば英語力)を身につけるには最適な教材です.一回の動画が10分前後で終わるため,空いた時間を有効的に活用ができ,講座数も豊富です.機械学習以外でも制御工学WebデザインVR開発まで非常に多岐にわたります.なかには大学のDegreeなどをも得られるような本格的な講義まであります.

Courseraに関する記事は,上のK氏もロ技研のアドベントカレンダーにて学習方法等を共有しています.細かい学習方法など,具体的な環境の揃え方などに興味がある方はこの記事を参考にしてみてください.

4-7,9-11月 Ian Goodfellowの深層学習邦訳版

61zJusXfyjL._SX258_BO1,204,203,200_

2018年度は,KCSの方針で週に2度ほど集まって,片方はゼロから作るを頭から読んでいく会(初級者向け)と,Ian Goodfellowの深層学習や各種論文を読んでいく会(上級者向け)を開催していました.

前者の方はおおよそ無難な結果で終わることができたのですが,後者の方は読み込み始めてからこの本が上級者向けなどではなく人智を超越した神とそれに匹敵する最強GAN制作おにいさんしか理解できないような代物であることに気付きました.

 

平平凡凡である僕は開いては悶え開いては悶えを繰り返し,全く先に進めずじまいでした.(げに今もそうなのですが.)しかし,間違いなく知識の得られる量としては日本語文献では抜群に豊富のような気がするため,これを理解さえできればおおよその深層学習の基礎については分かったと言い張れるだろうという自信がつきます(ということにしておきます).

4-7月 ゼロから作るDeep Learning ①

picture_large978-4-87311-758-4

内容に関する評価は10万部のセラーを記録したため探せばいくらでも出てくるため文が拙い僕が書くのもアレなので省略します.

KCSでは毎年(といっても先輩いわく2015年ごろからの習慣で)新入生向けの講習会を4-6月にかけて開催しています.その講習会の教材として活用しました.

実装レベルから,Adam等のオプティマイザの説明,CNNの構造まで詳しく説明されており,説明も概ね分かりやすかったです.次年度以降のAI班の活動方針は僕の手中でもないので知る由もないのですが,もし「教科書を作る」となった場合には非常に参考になるのではないか.というような良書です.

8-9月 パターン認識と機械学習

    その日、人類は思い出した。
    ベイズに凌辱されていた恐怖を。
    頻度論の中に囚われていた屈辱を。

    Seid ihr Frequenztheorie? Nein, wir sind der Bayesian!

ベイズに凌辱されました.

日記に日記とは思えない分量を書いたりしたので読んでください.

変分ベイズ(1) 変分ベイズ(2) 多項式回帰(1) 多項式回帰(2)

通年 論文輪読

KCSでは,学習の一環として,有志が集まって自分が読んできた論文をプレゼンにまとめて,知見を共有する回を行っています.

論文を読むことで,最新の知識を入手でき,多くこなしていくことで,論文の書き方や構成といったものがだいたい把握できて,将来の修論だとかを書く際に非常に参考になります.最新鋭の論文でも,Github等に本人の実装や他人による追実装等が挙げられており,写経するといっただけでも応用事例を実際にプログラムでき,最新鋭のアルゴリズムを手元のマシンで再現できるというのは,非常にモチベーションの向上につながるかと思います.

昨今,arXiv等には日に夥しい数の論文が投稿されています.その中から,読みたい論文を発見することは非常に困難だと思います.そこで,Twitter等を利用して他人の腕を借りて追いつくなど,周りの同士と共有して切磋琢磨できる環境を構築することは非常に重要となります.

これから

三田祭にて軽いWebアプリケーションを作った経験から,Web関連のことを学んでいこうかと思います.単一分野だけに留まらずに関連分野に目を向けて学習していきたいと思います.

また,KCS内でも本の輪読会を継続する声が上がっています.非常に嬉しいです.

リアルでも環境構築(特にデュアルディスプレイ)が重要なんだなと感じる一年であったとさ.完.

「ゼロから作るDeep Learning」輪読会を開催しました

AI班で8月7日〜10日にかけて「ゼロから作るDeep Learning」の輪読会を行いました。
全員が自分で読んできて、各自の担当範囲をスライドでまとめて発表するという形式で開催しました。
時間の都合で実装はできませんでしたが、コードを読むだけでも理解が深まったので良い本だったと思います。

dlscratch

深層学習の初心者がほとんどでしたが、一冊読んだことで概観が分かってくれたと思います。
誤差逆伝播法やCNNなどは初めてだと分かりにくいかと思いましたが、本の解説が分かりやすいこともあり順調に進めることもできました。
分からないところを輪読会で質問しあって解決できたことも多くあったので、この形式は良かったと思います。

今後は三田祭に向けてTensorflowを用いた実装の勉強をして行く予定です。

REINFORCE Algorithm でジャンプアクションを学習させてみた

こんにちは. TRSasasusu です.今回は前回に引き続き強化学習の話です.

スクリーンショット 2017-08-07 4.17.50

前回のQ学習は行動価値関数を更新していくことで学習を進めましたが,今回の REINFORCE Algorithm は直接方策を更新していくことで学習を進める方策勾配に基づくアルゴリズムの一種です.

方策勾配に基づく強化学習は状態空間や行動空間が連続であっても取り扱うことができます.ですが,なんとなく連続な状態空間における離散的な行動空間を持つ問題をやってみました.具体的には,ジャンプで穴を飛び越えることを学習していきます.ジャンプするのが早すぎてもタイミングが合わず落ちますし,ジャンプしなくてももちろん落ちます.行動はジャンプするかしないかで,横方向への移動に関しては自動で右へ一定の早さで進ませます.穴との距離と方策の確率モデルのパラメータの関係式をソフトマックス関数に入れ,これを計算して勾配を求めてパラメータを更新しました.


$$ \nabla_{\theta}J(\theta) = \sum^M_{m=1}\sum^T_{t=1}(R^m_t – \overline{b})\nabla_{\theta}\log{\pi_{\theta}}(a^m_t|s^m_t) $$
$$ \theta_{t+1} = \theta_t + \eta\nabla_{\theta}J(\theta) $$

また,報酬については,ジャンプしたら減点(疲れるから),落ちたら大きく減点,穴を越えたら大きく加点という形にしました.

結果は以下のようになりました.

実際にプログラムを動かしてみると,パラメータとしては初期値に関わらずジャンプアクションができそうな値になるのですが,うまくいかない場合も散見されました.REINFORCE Algorithm よりも工夫された手法もあるのでそちらに変更するのも良さそうです.

ところで, REINFORCE Algorithm ってすごく調べづらいのですが… そもそも強化学習は Reinforcement Learning なのでこちらばかり出てきますね.

あと,未だに上に挙げた式でベースラインを引いて良い理由がわからないので,誰か教えてください.

迷路にQ学習を使ってみた

お久しぶりです.ユーザ名を今回から Twitter に合わせて TRSasasusu にしました.

スクリーンショット 2017-08-03 4.06.12

記事にできるような活動があまりできなかったため,気がついたら前回の何か作った系の投稿から7ヶ月も経ってしまいました.今回の投稿は去年UMU氏が投稿したものを大いに参考にしています.(というか,ほぼ同じ.違う点は迷路が大きくなったことくらい)

Q学習は


$$ Q(S_t, A_t) = Q(S_t, A_t) + \alpha(R_{t+1} + \gamma \max_{a’ \in A(s’)} Q(S_{t+1}, a’) – Q(S_t, A_t)) $$

に従って行動価値関数を更新します.そもそも行動価値関数とは,といったことはこちらもUMU氏がまとめてくださっています.ありがとうございます.

方策決定には ε を固定した ε-greedy 法を用いています.これにより局所解を抜け出せるようにします.パラメータについては,


$$ \varepsilon = 0.1 $$
$$ 学習率\ \alpha = 0.1 $$
$$ 割引率\ \gamma = 0.9 $$

としています.

やっぱり途中で戻ったりするようになってしまいますね…何ででしょうね.

あと,Pygame 便利ですね.

今回のスクリプト(q_maze2.py, moyf/ml/rl/q.py)

2017年AI講習会総括

Unity講習会に続いて、AI講習会についても反省をします。

今年のAI講習会は機械学習の基礎から深層学習の入門を行いました。

全体の内容について

機械学習の基礎の基礎を知っておくことは重要だと思うのですが、やはり初めから数学的な話をするのはつまらなかったかなと思いました。
次年度以降は機械学習の基礎の部分は本当に軽くやるくらいが良いかもしれないですね。

テキストについて

「ITエンジニアのための機械学習理論入門」という本を参考にして書きました。
基礎の基礎の内容にとどめつつ、機械学習の概観が掴めるようにしたつもりです。
演習問題も少しですがつけて、Pythonと機械学習の実装の練習としました。

反省としては、量が多かったと思います。
入門講習会で欲張りすぎないほうが良いですね。
実装を増やしたほうが楽しめたと思います。

講習会について

人数は新入生だけだと最初の10人から最後は5人程度まで減りました。
少し込み入った話を急いでしすぎたと思います。
5限後ということで眠そうな人が多かったですね。
僕も眠かったです。

基本的に講義が中心になってしまったのも良くなかったです。
講義を聞くのは意外と疲れますよね。
僕も疲れました。
講義形式が効率が良い気もしなかったので、割り切って自分で本を読む時間を取ってもよかったかもしれないです。

その他

たまにはみんなでご飯を食べるのも良いと思います。

まとめ

  • 内容は少なくて良い
  • 自習形式で良い

AI班の記録(2017年5月10日)

AI班では4月から主に新入生向けにAI入門講習会を開催しています。
今日は講習会を一休みして、現在のAI技術の発展やAIの勉強方法について知ってもらう回になりました。

ai20170510

また、今年度はAI班も三田祭に向けて制作を行うことになりました。

最近の深層学習の紹介

以下のような深層学習の成果に関するYoutubeの動画を紹介しました。

  • モーションキャプチャ
  • セグメンテーション
  • モーション生成
  • 物体認識
  • 音声認識
  • GAN
  • 画風変換
  • SLAM
  • 自動彩色
  • 注視GAN
  • 超解像
  • トラッキング

AIの勉強の楽しさ

理論と実装を並行して学ぶ方法や、最新の論文を実装した例などを紹介しました。

講習会後の活動について

AI講習会後は主に画像認識に関する勉強をしていくことにしました。

AI班の紹介

慶応義塾大学のコンピュータサークルKCSのAI班では人工知能の理論や実装を勉強をしています。4月からは初心者向けAI講習会も開催中です。

AI班のTwitterはこちら
他のAI班の記録は「Tagged: AI班日誌
人工知能に関する記事は「Tagged: 人工知能

パラレルデータを用いない多対1声質変換

久しぶりに声質変換の活動を行ったので記録します。以前の記事から半年ほどが経ちました。

https://kcs1959.jp/archives/2432/research/フレーム独立gmm-based-mappingによる声質変換

今回参考にした論文はAI班の記事でも紹介されていますが、以下のような手法です。本文はこちら


声質変換は研究者の数が少ないので他のAI分野に比べて勢いがなく発展が遅れていますが、この手法は2016年8月に発表された画期的な手法です。この手法の凄いところは主に以下のような点です。

  • 同じ内容を話している音声データが必要ない
  • 学習で使った人以外の声からも変換できる
  • 実装が比較的楽にできる

今までの多くの声質変換手法では、同じ内容を話している音声のデータが必要で、学習で使用した人からの変換しかできませんでした。また、最近の手法はなかなか実装が難しいことも個人的には悩みどころでした。

今回の実装ではSPTKという音声分析ツール、Kerasというニューラルネットワークライブラリを主に使用しました。また、音声コーパスはPASDというものを使わせてもらっています。

声質変換の結果は以下のようになりました。
まずは変換元(入力)の声です。改めて強調しておくと、この人の声は声質変換を学習する(変換器をつくる)ときには全く使っていません。

そして変換結果が以下の音声です。変換先の声の目標は水瀬いのりさんという声優の声を使用しています。ラジオの音声を私的に録音したものです。水瀬いのりさんの実際の声はこちらなどを参照してください。

まだ不自然な部分や合成音感が残ってしまっていますが、少なくとも女性らしい声に変換されているのがわかります。今回は論文で使用された5分の1程度の時間の音声を使って学習したため、学習データを増やすことでもう少し質が向上すると思います。データが少ない中で精度を向上するために論文で示されているモデルから多少の変更をしています。詳しい内容は僕の個人的なブログも参照してみてください。

近年ではGANなどの生成モデルが盛んに研究されていて、音声の生成もGoogleのWaveNetに代表されるように数多くの新しい手法が提案されています。この潮流の中での声質変換の発展も期待しつつ、僕も引き続き研究していきたいと思います。

AI班の記録(2017/03/29)

今回はハミルトニアンモンテカルロ法の説明のために、サンプリングの基礎から詳しく説明がされました。

ai20170331

ある確率分布に従うようにサンプルを取得する方法です。アイデアは単純ですが、複雑な確率分布についてサンプリングを行うことは非常に難しい課題です。多次元に対応したり計算効率を向上するために様々な手法が提案されてきました。


AI班の紹介

慶応義塾大学のコンピュータサークルKCSのAI班では人工知能の理論や実装を勉強をしています。4月からは初心者向けAI講習会も行います!新入部員募集中です!

AI班のTwitterはこちら
他のAI班の記録は「Tagged: AI班日誌
人工知能に関する記事は「Tagged: 人工知能

AI班の記録(2017/03/22)

今日は3つの発表がありました。

ai20170322

Random forest の解説

代表的な集団学習の手法であるランダムフォレストの解説です。


Phonetic Posteriorgrams for Many-to-One Voice Conversion without Parallel Data Trainingの紹介

声質変換においてパラレルデータ(同じ内容を話している音声データ)が必要とせずに、あらゆる人の声をある一人の声に変換する手法の紹介です。


Outrageously Large Neural Networks:The Sparsely-Gated Mixture-of-Experts Layerの紹介

巨大なニューラルネットワークを構成するときに疎のゲートと大量のエキスパートを持つ混合エキスパート層を導入することで計算量を少なくする手法の紹介です。


AI班の紹介

慶応義塾大学のコンピュータサークルKCSのAI班では人工知能の理論や実装を勉強をしています。4月からは初心者向けAI講習会も行います!新入部員募集中です!

AI班のTwitterはこちら
他のAI班の記録は「Tagged: AI班日誌
人工知能に関する記事は「Tagged: 人工知能

AI班の記録(2017/03/13)

今回は2人が発表しました。

ai20170313

AI班ハードウェア領域

慶應大学天野研究室が参加しているプロジェクトの紹介を通じて、近年のトレンドであるハードウェアの最適化による学習の高速化・省電力化について紹介されました。


Unsupervised Image-to-Image Translation Networksの紹介

論文はこちら

教師データを必要としないGANの手法について説明されました。


AI班の紹介

慶応義塾大学のコンピュータサークルKCSのAI班では人工知能の理論や実装を勉強をしています。4月からは初心者向けAI講習会も行います!新入部員募集中です!

AI班のTwitterはこちら
他のAI班の記録は「Tagged: AI班日誌
人工知能に関する記事は「Tagged: 人工知能