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

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

twitter.com

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

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

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

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 Version3です。

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に沢山の人が重要だと注目が集まっています。教育も整ってきました。特別でしたがメインストリームです。

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

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

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

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