読者です 読者をやめる 読者になる 読者になる

Swift開発者が知りたかったけど聞きにくい機械学習のすべて | try! Swift Tokyo 2017 #tryswiftconf Day1-1 聞き起こし

twitter.com

The news says machine learning is the Next Big Thing.

But machine learning is happening way over there, on servers, in universities and in big companies with big data. What is it really, and what does it mean for over here, on mobile, in Swift? Are we –gulp– legacy tech?

This talk will present a fast, concrete, down-to-earth survey of machine learning, from the perspective of iOS & Swift, summarizing the main techniques, tools, and learning resources. It’ll outline how TensorFlow is like AVFoundation, how model training is like UI design, and how you can use iOS to gather big (enough) data and to exercise modern models using fast native code.

ニュースでは、機械学習は次の大きなものだと言っています。

しかし機械学習は大学や大きな企業のサーバーの あちら側ビッグデータとともに行われています。それはいったい何なのでしょうか? こちら側 であるモバイル、Swiftにとって何を意味するのでしょうか?私たちはレガシーな技術を –がっついている– のでしょうか?

このトークではiOSとSwiftの観点から迅速で具体的で現実的な機械学習の調査し、主なテクニック、ツール、学習素材をまとめます。TensorFlowがAVFoundationのようなものであること、モデルトレーニングがUIデザインのようなものであること、そして高速なネイティブコードを使ってどのようにiOSで十分に大きいデータを収集し、最新のモデルのエクササイズができるということをお伝えします。

speakerdeck.com

Swift開発者が知りたかったけど聞きにくい機械学習のすべて

f:id:niwatako:20170302100039j:plain

今日は機械学習の話を、Swiftの開発者としてお話します。

カスタマイズしたメガネを作っています。

f:id:niwatako:20170302100101j:plain

顔写真のモデルから拡張現実を使っていろいろなメガネを付けた時の様子をみられるようにしています。

f:id:niwatako:20170302100158j:plain

カスタマイズされたメガネを作れます。

コンピュータービジョンにはマシンラーニングが欠かせません。

機械学習は、変化が激しいので最新の情報はわかりません。

定義からしていきます。

f:id:niwatako:20170302100254j:plain

プログラムは考えて関数を作ります。

f:id:niwatako:20170302100307j:plain

マシンラーニングは、データを使って人間の考えを加えて関数を作ります。

みなさんから身長の平均値を集めてそれを返す関数を作るわけです。

f:id:niwatako:20170302100334j:plain

f:id:niwatako:20170302100404j:plain

男女で分ければ違う平均値を出すことができ、多少モデルが良くなります。

年齢や体重や靴のサイズを図って係数を使いながら積算していく

f:id:niwatako:20170302100430j:plain

そうするとより正確な数字を出せます。

これらはご存知の通り線形回帰です。

f:id:niwatako:20170302100456j:plain

これはあたらしい統計ではありません。

f:id:niwatako:20170302100509j:plain

なぜ機械学習の話でこんな古い物の話をしているのでしょう。

スマホなどが様々なデータを集めてきてくれます。そして演算能力が有ります。そしてそのデータが驚くような結果を出してくれます。

f:id:niwatako:20170302100556j:plain

ニューラルネットワークです。1950年台から考えられてきましたが、機能は進捗してきませんでした。

しかしこの3つの入力値を増やし、真ん中の層を48レイヤーにしていってみましょう

f:id:niwatako:20170302100645j:plain

これがInception-v3です。


記者ざっくり注:

f:id:niwatako:20170310002418p:plain

↑Inception-v3のネットワークの概略図。ref) Research Blog: Train your own image classifier with Inception in TensorFlow

Inception-v3はGoogleが開発したCNN(Convolutional Neural Network=畳み込みニューラルネットワーク)のモデル。CNNは主に画像認識に利用される、特徴を抽出するフィルタである畳み込み層と抽出された特徴を圧縮するプーリング層を持つことを特徴とする多層のニューラルネットワークニューラルネットワークとは、計算の仕組みが脳のニューロンの信号伝播の様子と似ている(と一般に説明されている)ことからそう呼ばれ、ある計算ユニットの出力が別のユニットの入力になる計算ユニットのネットワーク。機械学習はこの計算ユニットの出力しきい値やユニット間の結合度合いの調整をコンピューターに任せ(たとえば教師データを与え逆算させるような形で)最適化(学習)させる。(すごくざっくり)

※ちゃんと勉強したい人へ。この本の79ページから「畳み込みニューラルネット」の章です。

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)


Appleがサンプルコードを出したため、iOSバイスの上でもこれを使うことができます。

f:id:niwatako:20170302100717j:plain

素晴らしいところは、様々なレイヤー(層)でぼやっとしているものを認識していくわけです。

f:id:niwatako:20170302100741j:plain

様々なものを分類をして行く。その結果が驚くような結果になる。なぜ人々がこれにこれほどワクワクしているのか。

f:id:niwatako:20170302100829j:plain

コンピューターのなかでいろいろなことをするのは難しい、というのが2014年のマンガ。

しかし今ではちょっとコンピューターへの教え方を変えれば簡単にできるようになった。

マシンラーニングは分析や、スピーチの認識が飛躍的に伸びるところにあります。

こうしたことはモバイルアプリ開発に影響するのでしょうか?

f:id:niwatako:20170302100933j:plain

f:id:niwatako:20170302100955j:plain

顔検知などに使われています、これは初期の機械学習です。

音声で(音声を対象にして?)コーディングは非常に難しかったが、コード一つでできる世界になっていく。

f:id:niwatako:20170302101027j:plain

数学者じゃなくてもモデルを作ることはできます。

f:id:niwatako:20170302101040j:plain

機械学習はSwiftで言うと1.0です。Swiftも1.0が出た頃はメインストリームから考えると変わっていたところがあったのではないでしょうか。

しかしいまでは、Swiftに沢山の人が重要だと注目が集まっています。教育も整ってきました。特別でしたが、今はメインストリームです。

同じことが機械学習で起きています。

f:id:niwatako:20170302101140j:plain

色んな人が色んな形で説明しようとするようになってきました。GoogleのTensorFlowもそうです。ビデオなどが公開されています。使い方を説明する人がたくさんいます。

では機械学習をSwift環境で使えるでしょうか

f:id:niwatako:20170302101223j:plain

f:id:niwatako:20170302101246j:plain

f:id:niwatako:20170302101248j:plain

機械学習には学習と使うという段階が有ります。そこでPythonを使うのは科学環境でよく使われているからです。

展開する段階でSwiftを使うことができます。TensorFlowの学習データを(端末内に持って)利用したり、SDKを使ってネットワーク経由で利用することもできます。Appleが提供する物もあります。

f:id:niwatako:20170302101422j:plain

f:id:niwatako:20170302101429j:plain

AVFoundationを使うようなものです。

f:id:niwatako:20170302101445j:plain

これがAPIを活用するというレベルでの視点になります。

機械学習を作ることはUIを作ることに似ています。

f:id:niwatako:20170302101529j:plain

なぜうまく行ったのか、なぜうまく行かなかったのか、はっきりとはわかりません。

(記者のざっくり注: 出来上がったニューラルネットワークは多層の入り組んだネットワークで特定の計算結果がどのユニットやユニット間の結合に起因しているのかを簡単に読み解いたり、手動で調整して意図したとおりの挙動に変更出来るようなものではなくなってしまう、的なことを言っている。)

アウトプットの解釈が難しいんです。

デザインは直感的にこれが良いのではないかというのがじっさいユーザーに見せてみるまでわからない。マシンラーニングモデルはそれに似ている。

f:id:niwatako:20170302101701j:plain

iOSはマシンラーニングによい環境だと思います。フォームを記入してYes/Noなどの精度の高い情報が入っているわけではありません。

例えば写真はいろいろな要素があります。iOSバイスは直接皆さんの手で使うものです。はっきりしていない世界とやり取りするものです。マシンラーニングのソフトウェアはそうした曖昧な世界を取り込んで、具体的な解釈にしていくことができます。

私たちのプロダクトも、人間的な人の顔から具体的な個人を特定して精度の高い指示でロボット、レーザーに対して素材を切り込んでいく。

何からはじめたら良いでしょう

f:id:niwatako:20170302101857j:plain

誰も専門家ではないのですぐ始めることができます。

f:id:niwatako:20170302101920j:plain

TensorFlowのチュートリアルスタンフォードの講座、YouTubeに面白いビデオを公開している人も居ます。

まとめ

f:id:niwatako:20170302101957j:plain

  • すぐはじめられます。
  • APIのように利用できます。
  • 深掘りもしていくことができます。
  • デプロイしたい場合にはPythonを使ってモデルを訓練し、Swiftを使って人々の手に届けることができます。

f:id:niwatako:20170302102050j:plain

Q&A

さっき、事例をあげて、どうやってメガネを作るかの話があったが、レンダリングは端末側で処理している?サーバーで処理している?

顔の形をサーバーで算出し、結果をクライアントに流します。レンダリングはSceneKitを使ってクライアントでやっています。それで流れるように提供できます。 今後はよりクライアント側で出来るようにしたいです。通常サーバーでやらなければならない処理をクライアントでできるようになるというメリットが有ります。

みんなの反応

Togetter

togetter.com

気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして(このブログに限らず)良い記事があったら、はてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!