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で十分に大きいデータを収集し、最新のモデルのエクササイズができるということをお伝えします。
Swift開発者が知りたかったけど聞きにくい機械学習のすべて
今日は機械学習の話を、Swiftの開発者としてお話します。
カスタマイズしたメガネを作っています。
顔写真のモデルから拡張現実を使っていろいろなメガネを付けた時の様子をみられるようにしています。
カスタマイズされたメガネを作れます。
コンピュータービジョンにはマシンラーニングが欠かせません。
機械学習は、変化が激しいので最新の情報はわかりません。
定義からしていきます。
プログラムは考えて関数を作ります。
マシンラーニングは、データを使って人間の考えを加えて関数を作ります。
みなさんから身長の平均値を集めてそれを返す関数を作るわけです。
男女で分ければ違う平均値を出すことができ、多少モデルが良くなります。
年齢や体重や靴のサイズを図って係数を使いながら積算していく
そうするとより正確な数字を出せます。
これらはご存知の通り線形回帰です。
これはあたらしい統計ではありません。
なぜ機械学習の話でこんな古い物の話をしているのでしょう。
スマホなどが様々なデータを集めてきてくれます。そして演算能力が有ります。そしてそのデータが驚くような結果を出してくれます。
ニューラルネットワークです。1950年台から考えられてきましたが、機能は進捗してきませんでした。
しかしこの3つの入力値を増やし、真ん中の層を48レイヤーにしていってみましょう
これがInception-v3です。
記者ざっくり注:
↑Inception-v3のネットワークの概略図。ref) Research Blog: Train your own image classifier with Inception in TensorFlow
Inception-v3はGoogleが開発したCNN(Convolutional Neural Network=畳み込みニューラルネットワーク)のモデル。CNNは主に画像認識に利用される、特徴を抽出するフィルタである畳み込み層と抽出された特徴を圧縮するプーリング層を持つことを特徴とする多層のニューラルネットワーク。ニューラルネットワークとは、計算の仕組みが脳のニューロンの信号伝播の様子と似ている(と一般に説明されている)ことからそう呼ばれ、ある計算ユニットの出力が別のユニットの入力になる計算ユニットのネットワーク。機械学習はこの計算ユニットの出力しきい値やユニット間の結合度合いの調整をコンピューターに任せ(たとえば教師データを与え逆算させるような形で)最適化(学習)させる。(すごくざっくり)
※ちゃんと勉強したい人へ。この本の79ページから「畳み込みニューラルネット」の章です。

- 作者: 岡谷貴之
- 出版社/メーカー: 講談社
- 発売日: 2015/04/08
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (13件) を見る
Appleがサンプルコードを出したため、iOSデバイスの上でもこれを使うことができます。
素晴らしいところは、様々なレイヤー(層)でぼやっとしているものを認識していくわけです。
様々なものを分類をして行く。その結果が驚くような結果になる。なぜ人々がこれにこれほどワクワクしているのか。
コンピューターのなかでいろいろなことをするのは難しい、というのが2014年のマンガ。
しかし今ではちょっとコンピューターへの教え方を変えれば簡単にできるようになった。
マシンラーニングは分析や、スピーチの認識が飛躍的に伸びるところにあります。
こうしたことはモバイルアプリ開発に影響するのでしょうか?
顔検知などに使われています、これは初期の機械学習です。
音声で(音声を対象にして?)コーディングは非常に難しかったが、コード一つでできる世界になっていく。
数学者じゃなくてもモデルを作ることはできます。
機械学習はSwiftで言うと1.0です。Swiftも1.0が出た頃はメインストリームから考えると変わっていたところがあったのではないでしょうか。
しかしいまでは、Swiftに沢山の人が重要だと注目が集まっています。教育も整ってきました。特別でしたが、今はメインストリームです。
同じことが機械学習で起きています。
色んな人が色んな形で説明しようとするようになってきました。GoogleのTensorFlowもそうです。ビデオなどが公開されています。使い方を説明する人がたくさんいます。
では機械学習をSwift環境で使えるでしょうか
機械学習には学習と使うという段階が有ります。そこでPythonを使うのは科学環境でよく使われているからです。
展開する段階でSwiftを使うことができます。TensorFlowの学習データを(端末内に持って)利用したり、SDKを使ってネットワーク経由で利用することもできます。Appleが提供する物もあります。
AVFoundationを使うようなものです。
これがAPIを活用するというレベルでの視点になります。
機械学習を作ることはUIを作ることに似ています。
なぜうまく行ったのか、なぜうまく行かなかったのか、はっきりとはわかりません。
(記者のざっくり注: 出来上がったニューラルネットワークは多層の入り組んだネットワークで特定の計算結果がどのユニットやユニット間の結合に起因しているのかを簡単に読み解いたり、手動で調整して意図したとおりの挙動に変更出来るようなものではなくなってしまう、的なことを言っている。)
アウトプットの解釈が難しいんです。
デザインは直感的にこれが良いのではないかというのがじっさいユーザーに見せてみるまでわからない。マシンラーニングモデルはそれに似ている。
iOSはマシンラーニングによい環境だと思います。フォームを記入してYes/Noなどの精度の高い情報が入っているわけではありません。
例えば写真はいろいろな要素があります。iOSデバイスは直接皆さんの手で使うものです。はっきりしていない世界とやり取りするものです。マシンラーニングのソフトウェアはそうした曖昧な世界を取り込んで、具体的な解釈にしていくことができます。
私たちのプロダクトも、人間的な人の顔から具体的な個人を特定して精度の高い指示でロボット、レーザーに対して素材を切り込んでいく。
何からはじめたら良いでしょう
誰も専門家ではないのですぐ始めることができます。
TensorFlowのチュートリアルやスタンフォードの講座、YouTubeに面白いビデオを公開している人も居ます。
まとめ
Q&A
さっき、事例をあげて、どうやってメガネを作るかの話があったが、レンダリングは端末側で処理している?サーバーで処理している?
顔の形をサーバーで算出し、結果をクライアントに流します。レンダリングはSceneKitを使ってクライアントでやっています。それで流れるように提供できます。 今後はよりクライアント側で出来るようにしたいです。通常サーバーでやらなければならない処理をクライアントでできるようになるというメリットが有ります。
みんなの反応
CourseraのAndrew先生の講義でやったやつだ #tryswiftconf
— ぎぎにゃん (@giginet) 2017年3月2日
顔認識、自分で学習してモデル作らずともそこそこ十分なモデルが世の中に溢れているから機械学習プロダクト試すのに向いてる #tryswiftconf
— satoshi namai (@ainame) 2017年3月2日
まあ、 WebService 使って、連携する、って手になってくるよね。#tryswiftconf
— イルカ@新米プログラマー (@ikkitang) 2017年3月2日
大学で耳にタコができるくらい聞いて来たMachine LearningやDeep Learningのあれこれが今、このスライドを理解する役に立っていて個人的に嬉しい#tryswiftconf
— TK (Cokaholic) (@TK_u_nya) 2017年3月2日
他にSwiftでTensorFlowと連携する方法として、TensorFlowで学習した結果をSwift上で使うライブラリ作ってます。 #tryswiftconfhttps://t.co/HIlAZkpZHi
— koher (@koher) 2017年3月2日
機械学習はUIと同じ、は言い得ていてなるほどと思った。良さを証明できない、経験でよくなっていく、98%合っていれば万々歳、など。 #tryswiftconf
— Hirohito Kato ⌘ (@hkato193) 2017年3月2日
iOSでTensor Flowの話聞いてる。Tensor Flowのおもしろ動画ってのはこれか https://t.co/Josjm28yHI #tryswiftconf
— 斉藤祐輔 (@uskwitter) 2017年3月2日
Togetter
気に入った記事は はてなブックマーク
はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift
そして(このブログに限らず)良い記事があったら、はてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!