機械学習

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

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

dlscratch

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

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

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: 人工知能

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: 人工知能

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

今回は3人が発表しました。また、商学部1年の方が1名見学に来てくれました!

ai20170306

U-Net: Convolutional Networks for Biomedical Image Segmentationの紹介

論文はこちら

Image-to-ImageのCNNを改良したU-Netの提案論文。生物分野ではデータが小さいことが良くあり、これを克服することを目的として提案されました。現在は様々な分野に適用されています。


TDAの概要と適用・有用性

TDA(Topological Data Analysis・位相的データ解析)の概要と、位相幾何学によってデータ解析や機械学習がどのような恩恵を受けるのかを紹介しました。


Depth Creates No Bad Local Minimaの紹介

論文はこちら

ニューラルネットワークの損失関数の非凸性を生む「深さ」と「非線形性」のうち、「深さ」に注目した論文です。線形の活性化関数で結ばれた層をどれだけ深くしても、全ての局所解は大域最適解と一致することが説明されています。


AI班の紹介

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

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

フレーム独立GMM-based mappingによる声質変換

こんにちは。1年のSannkoです。AI班です。

初投稿になります。

宜しくお願いします。

 

UMUさんの記事にもありますが、AI班は声質変換の活動をしています。

まだどのような手法で声質変換をしていくかは検討中ですが、既存の手法を試してみようと思います。

 

戸田さんの論文の2章に書いてある、提案手法ではない古い手法をやってみます。

この手法ではフレームごとにGMMでソースとターゲットの同時分布を推定して、そこから条件付き確率やら周辺確率が出せるのでそれを使って変換を行います。

フレーム間の関係は全く考えられていないので、最近の手法と比べるとかなり古典的な手法ですね。

 

https://pdfs.semanticscholar.org/d419/ceb2753232373fd4ab9534b371e017cd9dc1.pdf

 

データはこのサイトのものを使わせてもらいました。

ありがたいですね、こういう研究室は。

8.00モーラ/秒の25文のデータを使っています。

 

http://www.it.ice.uec.ac.jp/SRV-DB/

 

女性1から男性への変換をやってみたいと思います。

変換元の女性の声はこれ

 

 

ターゲットはこの男性です。

 

 

この文章のデータは訓練データからは除いてあります。

変換を行った結果がこれです。

基本周波数はそのままなので、声が高くなっているのがわかります。

ただ、声質は男性のものに近くなっている気がしますね(定性的)。

 

 

基本周波数の変換についてはフィルタとの関係などを考えてきちんと検討すべきですが、(正直よく分からないので)今回はとりあえず単純に切片0の回帰曲線でモデル化しました。

単純ですが、画像をみるとわかる通り、それなりに妥当です(定性的2)。

(追記)貼ってから気づいたんですが、この画像は切片を0にする前のやつでした。下のデータに使ったモデルはちゃんと切片0になっています。

figure_1-%e3%81%ae%e3%82%b3%e3%83%94%e3%83%bc

このモデルを使って基本周波数も変換をした結果がこれです。

ピッチを適当に扱ったのでノイズが増えてしまったような気がします(定性的3)。

しかしかなりターゲットの声に近づいたと思います(定性的4)。

 

 

正直、この単純な手法でここまで変換できたので驚いています。

今後は戸田さんの提案手法など、もう少し高度な手法を試してみたいですね。

音声分析合成システムWORLDをPythonに移植した

最近,音声の声質変換を行うために,Pythonで使えるライブラリを探していました.matlab上で使える便利な音声分析合成ソフトとして「WORLD」が存在しますが,これをPython上で使おうとすると少々めんどくさいということがありました.そこで,科学研究用のスタンダードなPython開発環境Anacondaがあれば簡単にWORLDを使えるように,matlabのコードを参考にPythonへ完全移植を行っています.とりあえず,基本的な分析→合成までの部分の移植が完了したので,移植したコードがまともに動くかどうかの検証も含めて記事にしてみました.

 

まずは,元の音声データです.この音声データをもとに,パラメータを抽出(分析)し,さらに再合成することで音声データが再構築されます.再構築する際に,パラメータを統計的に変化させて別人の声を生成する方法が,「統計的声質変換」です.

 

次に,正規版(matlab)の変換結果です.

 

最後に,移植版(Python)の変換結果です.

 

聞いてみると,正規版と移植版の違いが分かると思いますが,これは,matlab版で使用されている一部の関数が,pythonでは存在しないために,なるべく同じような挙動をするようにコードを書いていますが,やや違いがでてきてしまうためです.

なお,この移植版を公開していいかわからないため,公開するかどうかは後日決定します.

今後,移植を完成させつつ,声質変換についての記事も書いていこうと思います.BYE!

 

 

–ここから残念なお話–

まず,matlabからpythonに移植するとき,配列のインデックスの書き方の違いで,とても混乱した.matlabでは,配列のはじめは1から始まるが,Pythonでは一般的な言語と同じく0である.これだけなら,数値を1ずらすだけでいいのだが(実際にはそれだけでもかなりのストレスである.),配列から一部の列を取り出す際,例えば,[0,1,2,3,4,5]という配列から[2,3,4]を取り出すとき,取り出しの記述はPythonでは2:5(2番目から5番目の意)となり,Matlabでは3:5(3番目から5番目の意)とかく(Pythonでは,一番最後のインデックスは無視される.)これが非常に頭を混乱させる要因となっており,一番混乱したときは,matlabのコードを実行したときの図を紙に書いて,紙に書かれた内容をPythonコードで書くという所業をしてしまった.

さらに,面倒くさいのが,matlabで定義されている関数を,pythonで移植する場合,matlabの関数となるべく近い挙動をするpythonコードを書く必要がある.pythonで完全一致する関数があればいいのだが(うれしいことに,汎用的なものは共通化されているようだ),すべてきれいに一致するとは限らないので,なるべく同じ計算結果となるようにコードを書く必要があった.

一部は,面倒くさいので放置しているが,聞こえ上は似ているものができたので,まずは良しとすることにした.

 

LOGSPECTROGRAMさむねいる

人工知能講習会(機械学習講習会)やることまとめ

目標

MNISTデータベースの学習

内容目次

全4回,予備1回

1.Python入門

1.1 環境構築(Anaconda + Mako + PyOpenCL,Device for OpenCL)

1.2 Dive Into Python

2.数値計算入門

2.1 NUMPY+SCIPY入門

3 .ニューラルネットワーク入門

3 .1 機械学習の基礎知識

3 .2 ニューラルネットワークの基礎知識

3.3 NNPropagator入門

4.NNPropagatorを使ったニューラルネットワークの学習

4.1 多層パーセプトロンによる関数近似

4.2 MNIST学習

前提条件

手続き型プログラミング言語を少し習得していること.

※手続き型プログラミング言語:C,C++,Python,Java,C#,Javascript…など.

内容

1.Python入門

人工知能プログラミングで必要となる,Pythonについて入門します.

1.1 環境構築(Anaconda + Mako + PyOpenCL,Device for OpenCL)

Pythonでプログラミングできる環境を作ります.KCS製のニューラルネットワークライブラリ「NNPropagator」を動作させるための環境となっています.

1.2 Python入門

Pythonを知らない人向けに,一通り簡単にPythonを学びます.

2.数値計算入門

数値計算を知らない人向けに,一通り簡単にPythonを学びます

2.1 NUMPY+SCIPY入門

Pythonには,優秀な数値計算用のライブラリが多数存在します.そのうち,汎用性が高く習得が容易な「Numpy」について一通り簡単に学びます.Scipyは必要に応じて学びます.

3 .ニューラルネットワーク入門

機械学習でも最先端で活用されている,ニューラルネットワークについて学びます.

3 .1 機械学習の基礎知識

機械学習とは何かについて簡単に学びます.

3 .2 ニューラルネットワークの基礎知識

ニューラルネットワークとは何かについて簡単に学びます.確率と線形代数の知識が多少必要ですが,わからなければ教えます.

3.3 NNPropagator入門

KCS独自開発のライブラリNNPropagatorについて学びます.独自開発のライブラリと言っても,ニューラルネットワークの実装を補助するものです.ライブラリもナイーブに書いており,実装を理解するのも簡単です.

4.NNPropagatorを使ったニューラルネットワークの学習

NNPropagatorを用いて,こちら側で用意したデータベースを解析して頂きます.

今回の講習会では,2系統(関数近似系/MNIST)用意してあります.また,確認用に自分でデータベースを作り,評価します.

4.1 多層パーセプトロンによる関数近似

こちらで用意した学習用のデータ群をNNPropagatorを用いて学習・評価します.

4.2 MNIST学習(数字文字認識)

MNISTデータ群をNNPropagatorを用いて学習・評価します.

MNISTとは,下の画像の様な数字の画像と教師データのデータベースです.

(画像を与えられた時に何の数値であるか推定する人工知能を作ります.)

img679

教科書

1~3.2インターネット上または書籍で適当なものを引用し,活用します.

3.3~ 独自の教科書を用います.

簡単な迷路探索でQ学習を使ってみた

簡単な迷路探索でQ学習を使ってみた

dfdfadfasdfa

Q学習(強化学習の一種)を用いて,固定迷路を解くエージェントを実装する.

迷路は固定で,大きさは8×3.左上がスタート,右下がゴールとして.ゴールに到達した時報酬をもらい,イテレーション終了.これを難度も繰り返す.

実験結果はこのようになりました.↓

100イテレーションおきにを動画で出力してあります.

スタートからゴールに行くまでにかかったターン数をグラフにしてみると,次のようになった.

fdasfasdfas

このグラフを見るとわかると思うが,約1500ターンを境目に逆にかかるターン数が増加している.これがなぜなのか調査する必要があると考える.

調査項目

alpha = 学習率 gamma = 割引率 goal = ゴール時報酬

alpha = 0.01 gamma = 0.99 goal=1.0 10000itersで全然学習せず

alpha = 0.01 gamma = 0.99 goal=100 1500がピーク

OPENCL版NNPropagatorを開発しました!

OpenCL版NNPropagatorを開発しました!

高速なニューラルネットワークの学習のために,OpenCLを使い学習の高速化をしました.

NNPropagatorの理念に基づき,OpenCL版の実装も,トリッキーな最適化を施したものではなく,アルゴリズムが把握しやすいものになっています.

参考に,私の環境では,後日投稿予定の「CNNでMNIST実装」では,数千倍程度の高速化となりました.OpenCL_Logo

OpenCLとは?

OpenCLとは,マルチコアCPUやGPU、Cellプロセッサ、DSPなどによる異種混在の計算資源を利用した並列コンピューティングのためのクロスプラットフォームなフレームワークです。どんな計算資源でも同一のコードで並列プログラミングをすることができます.OpenCLのカーネルはOpenclC言語というC言語ライクな言語で記述することができ,非常に使いやすいです.

NNPropagatorでの使い方

NNPropagatorでの使い方は,CPU版と比べて一切変化しません.

あたらしい種類の層を追加するときに,OpenCLコードで書く必要があります.