ニュースでは、機械学習は次の大きなものだと言っています。
しかし機械学習は大学や大きな企業のサーバーの あちら側 でビッグデータとともに行われています。それはいったい何なのでしょうか? こちら側 であるモバイル、Swiftにとって何を意味するのでしょうか?私たちはレガシーな技術を –がっついている– のでしょうか?
このトークではiOSとSwiftの観点から迅速で具体的で現実的な機械学習の調査し、主なテクニック、ツール、学習素材をまとめます。TensorFlowがAVFoundationのようなものであること、モデルトレーニングがUIデザインのようなものであること、そして高速なネイティブコードを使ってどのようにiOSで十分に大きいデータを収集し、最新のモデルのエクササイズができるということをお伝えします。
Swift開発者が知りたかったけど聞きにくい機械学習のすべて
今日は機械学習の話を、Swiftの開発者としてお話します。
カスタマイズしたメガネを作っています。
顔写真のモデルから拡張現実を使っていろいろなメガネを付けた時の様子をみられるようにしています。
カスタマイズされたメガネを作れます。
コンピュータービジョンにはマシンラーニングが欠かせません。
機械学習は、変化が激しいので最新の情報はわかりません。
定義からしていきます。
プログラウは考えて関数を付くります。
マシンラーニングはデータを使って人間の考えを加えて関数を作ります。
みなさんから身長の平均値を集めてそれを返す関数を作るわけです。
男女で分ければ違う平均値を出すことができ、多少モデルが良くなります。
年齢や体重や靴のサイズを図って係数を使いながら積算していく
そうするとより正確な数字を出せます。
これらはご存知の通り線形回帰です。
これはあたらしい統計ではありません。
なぜ機械学習の話でこんなふるい物の話をしているのでしょう。
スマホなどが様々なデータを集めてきてくれます。そして演算能力が有ります。そしてそのデータが驚くような結果を出してくれます。
ニューラルネットワークです。1950年台から考えられてきましたが昨日は進捗してきませんでした。しかしこの3つの入力値を増やし、真ん中の層を48レイヤーにしていってみましょう
これがInception Version3です。
Appleがサンプルコードを出したため、iOSデバイスの上でもこれを使うことができます。
素晴らしいところは、様々なレイヤーでぼやっとしているものを認識していくわけです。
様々なものを分類をして行く。その結果が驚くような結果になる。なぜ人々がこれにこれほどワクワクしているのか。
コンピューターのなかでいろいろなことをするのは難しい、というのが2014年のマンガ。
しかし今ではちょっとコンピューターへの教え方を変えれば簡単にできるようになった。
マシンラーニングは分析や、スピーチの認識が飛躍的に伸びるところにあります。
こうしたことはモバイルアプリ開発に影響するのでしょうか?
顔検知などに使われています、これは初期の機械学習です。
音声でコーディングは非常に難しかったがコード一つでできる世界になっていく。
数学者じゃなくてもモデルを作ることはできます。
機械学習はSwiftで言うと1.0です。メインストリームで考えると変わっていたところがあったのではないでしょうか。
いまSwiftに沢山の人が重要だと注目が集まっています。教育も整ってきました。特別でしたがメインストリームです。
同じことが機械学習で起きています。
色んな人が色んな形で説明しようとするようになってきました。GoogleのTensorFlowもそうです。ビデオなどが公開されています。使い方を説明する人がたくさんいます。
では機械学習をSwift環境で使えるでしょうか
機械学習には学習と使うという段階が有ります。Pythonを使うのは科学環境でよく使われているからです。
展開する段階でSwiftを使うことができます。TensorFlowの学習データを利用したり、SDKでネットワーク経由で利用することもできます。Appleが提供する物もあります。
AVFoundationを使うようなものです。
これがAPIを活用するというレベルでの視点になります。
機械学習を作ることはUIを作ることに似ています。
なぜうまく行ったのか、なぜうまく行かなかったのか、はっきりとはわかりません。
アウトプットの解釈が難しいんです。
デザインは直感的にこれが良いのではないかというのがじっさいユーザーに見せてみるまでわからない。マシンラーニングモデルはそれに似ている。
iOSはマシンラーニングによい環境だと思います。フォームを記入してYes/Noなどの精度の高い情報が入っているわけではありません。
例えば写真はいろいろな要素があります。iOSデバイスは直接皆さんの手で使うものです。世界ははっきりしていない世界とやり取りするものです。マシンラーニングのソフトウェアはそうした曖昧な世界を取り込んで、具体的な解釈にしていくことができます。
私たちのプロダクトも、人間的な人の顔から具体的な個人を特定して精度の高い指示でロボット、レーザーに対して素材を切り込んでいく。
何からはじめたら良いでしょう
誰も専門家ではないのですぐ始めることができます。
TensorFlowのチュートリアルやスタンフォードの講座、YouTubeに面白いビデオを公開している人も居ます。
まとめ
すぐはじめられます。 APIのように利用できます。 深掘りもしていくことができます。 デプロイしたい場合にはPythonを使ってモデルを訓練し、Swiftを使って人々の手に届けることができます。
Q&A
さっき、事例をあげて、どうやってメガネを作るかの話があったが、レンダリングは端末側?サーバー?
顔の形をサーバーで算出し、結果をクライアントに流します。レンダリングはScheneKitを使ってクライアントでやっています。それで流れるように提供できます。 今後はよりクライアント側で出来るようにしたいです。通常サーバーでやらなければならない処理をクライアントでできるようになるというメリットが有ります。