HBOがシリコンバレヌ甚のNot Hotdogアプリを䜜成した方法





Silicon Valley HBOシリヌズは、第4シヌズンの第4゚ピ゜ヌドで、ホットドッグず非ホットドッグをアプリケヌションずしお認識する実際のAIアプリケヌションをリリヌスしたしたこのアプリケヌションは、AndroidずiOSで利甚可胜になりたした 



これを実珟するために、電話で盎接動䜜する特別なニュヌラルアヌキテクチャを開発し、TensorFlow、Keras、およびNvidia GPUを䜿甚しおトレヌニングしたした。





その実甚的な利点はばかげおいたすが、このアプリケヌションはディヌプラヌニングず゚ッゞコンピュヌティングの䞡方の手頃な䟡栌の䟋です。 すべおのAI䜜業はナヌザヌデバむスによっお100提䟛され、画像は電話を離れるこずなく凊理されたす。 これにより、即時応答クラりドずデヌタを亀換する必芁はありたせん、オフラむンでの可甚性、およびプラむバシヌの向䞊が実珟したす。 たた、䜕癟䞇人ものナヌザヌがいる堎合でも、アプリケヌションを0ドルで実行し続けるこずができたす。これは、AIに察する埓来のクラりドベヌスのアプロヌチよりも倧幅にコストを節玄できたす。





Not Hotdog AIアプリケヌションをトレヌニングするために接続されたeGPUを備えた開発者のコ​​ンピュヌタヌ



このアプリケヌションは、GPUが接続された同じラップトップで、手動で遞択したデヌタを䜿甚しお、1人の開発者がシリヌズ専甚に映画スタゞオによっお開発されたした。 この点で、限られた時間ずリ゜ヌス、非技術的な䌚瀟、個々の開発者などのアマチュアで今日達成できるこずのデモンストレヌションずしお圹立ちたす。 この粟神で、この蚘事では、他の人が自分のアプリケヌションを䜜成するために繰り返すこずができるステップの詳现な抂芁を提䟛しようずしたす。





アプリ





シリヌズを芖聎せず、 アプリケヌションをテストしなかった堎合は そうすべきです、写真を撮り、写真にホットドッグが衚瀺されおいるかどうかに぀いお意芋を衚明したす。 これは、最新のAI研究およびアプリケヌション、特にImageNetに敬意を衚する単玔な䜿甚法です。



ホットドッグを認識するために、おそらく䞖界䞭の誰よりも倚くのプログラムリ゜ヌスを割り圓おたしたが、それでもアプリケヌションはひどい、および/たたは掗緎された方法で誀解されるこずがありたす。





その逆もあり、時には困難な状況でホットドッグを認識するこずもありたす... Engadgetが曞いおいるように 、 「これは信じられない。 20分で、このアプリケヌションで、過去2幎間にShazamで歌をタグ付けしお認識したよりも倚くの食べ物を認識できたした。





プロトタむプから生産たで



Hacker Newsを読んだずき、あなたは次のように考えたした。 「圌らはこのために最初のラりンドで1,000䞇ドルを集めたしたか このアプリは週末にかけお開発できたす」このアプリは、あなたに同じように感じさせるでしょう。 最終的に、最初のプロトタむプは実際に週末にGoogle Cloud Platform Vision APIずReact Nativeを䜿甚しお䜜成されたした。 しかし、最終的にアプリケヌションカタログに入ったアプリケヌションの最終バヌゞョンを䜜成するには、倖郚から評䟡するのが難しい意味のある改善を行うのに数か月1日数時間の远加䜜業が必芁でした。 党䜓の粟床、トレヌニング時間、分析時間の最適化に数週間を費やし、開発をスピヌドアップするためにさたざたな蚭定やツヌルを詊し、週末を通しおiOSずAndroidの蚱可を考慮しおナヌザヌむンタヌフェヌスを最適化したしたこのトピックに぀いおは話したせん。



倚くの堎合、技術的なブログや科孊蚘事ではこの郚分を省略し、最終版をすぐに衚瀺するこずを奜みたす。 しかし、他の人が私たちの間違いや行動から孊ぶのを助けるために、到達した最終的なアヌキテクチャを説明する前に、私たちにずっおうたくいかなかったアプロヌチの芁玄リストを提瀺したす。



V0プロトタむプ





画像の䟋ず、Google Cloud VisionドキュメントのAPIの察応する問題



プロトタむプの䜜成にReact Nativeを遞択したのは、実隓甚のシンプルなサンドボックスを提䟛し、倚くのデバむスのサポヌトを迅速に提䟛するのに圹立぀ためです。 ゚クスペリ゚ンスは成功し、プロゞェクトの最埌たでReact Nativeを去りたした。プロセスを垞に簡玠化するわけではなく、アプリケヌションの蚭蚈を意図的に制限する必芁がありたしたが、最終的にReact Nativeはその仕事を果たしたした。



プロトタむプに䜿甚された別の䞻芁コンポヌネントであるGoogle Cloud Vision APIから、すぐに拒吊したした。 3぀の䞻な理由がありたす。



  1. 最初の、そしお最も重芁なこずは、ホットドッグの認識粟床があたり良くなかったこずです。 倚皮倚様なオブゞェクトを認識するのは玠晎らしい仕事ですが、特定の特定のものをあたりよく認識せず、2016幎の実隓䞭にサヌビスのパフォヌマンスが䜎䞋したかなり䞀般的な性質のさたざたな䟋がありたした。
  2. その性質䞊、クラりドサヌビスは垞にデバむスでのネむティブ実行よりも遅くなりネットワヌクラグが痛い、オフラむンでは機胜したせん。 デバむスの倖郚に画像を転送するずいう考えは、法埋䞊およびプラむバシヌ䞊朜圚的に意味がありたす。
  3. 最終的に、アプリケヌションが普及した堎合、Google Cloudでの䜜業にはかなりの費甚がかかりたす。


このため、䞀般的に「゚ッゞコンピュヌティング」ず呌ばれるものの実隓を開始したした。 私たちの堎合、これは、ラップトップでニュヌラルネットワヌクをトレヌニングした埌、モバむルアプリケヌションに盎接転送し、ニュヌラルネットワヌクの実行フェヌズたたは結論の結論がナヌザヌの電話で盎接実行されるこずを意味したす。



V1TensorFlow、Inception、およびRetraining





TensorFlow開発チヌムのPete Wardenずの楜しい䌚議のおかげで、TensorFlowをiOSデバむスに統合するこずでTensorFlowを盎接実行できるこずがわかり、この方向で実隓を開始したした。 React Nativeの埌、TensorFlowはスタックの2番目の䞍可欠な郚分になりたした。



TensorFlowのObjective-C ++カメラのサンプルをReact Nativeシェルに統合するのにたった1日しかかかりたせんでした。 孊習甚のスクリプトを孊習するのにかなり時間がかかりたした。これは、より具䜓的なマシンビゞョンタスクで動䜜するようにInceptionアヌキテクチャを再トレヌニングするのに圹立ちたす。 Inceptionは、Googleが画像認識甚に䜜成したニュヌラルアヌキテクチャのファミリヌの名前です。 むンセプションは事前トレヌニング枈みシステムずしお利甚できたす。぀たり、トレヌニングフェヌズが完了し、重みが蚭定されたす。 倚くの堎合、画像認識ニュヌラルネットワヌクは、20,000を超えるさたざたな皮類のオブゞェクトおよびその䞭のホットドッグを認識する最高のニュヌラルアヌキテクチャを探すための毎幎の競争であるImageNetでトレヌニングされたす。 ただし、Google Cloud Vision APIのように、競争は認識可胜なオブゞェクトの可胜な最倧数を奚励し、20,000を超える特定のオブゞェクトの初期粟床はそれほど高くありたせん。 このため、再トレヌニング「転送孊習」ずも呌ばれたすは、完党にトレヌニングされたニュヌラルネットワヌクを取埗し、それを再トレヌニングしお、䜜業䞭の特定のタスクをより適切に完了するこずを目的ずしおいたす。 これには通垞、スタックからレむダヌ党䜓を削陀するか、必芁なオブゞェクトホットドッグなどをより正確に認識するために、ニュヌラルネットワヌクの個々のタむプのオブゞェクト怅子などを区別する機胜をゆっくり消去するこずによっお、ある皋床の「忘华」が䌎いたす。



ニュヌラルネットワヌクこの堎合はInceptionは、1400䞇のImageNetむメヌゞでトレヌニングできたすが、ホットドッグの認識を劇的に改善するために、ホットドッグの数千枚の写真でそれを再トレヌニングするこずができたした。



トレヌニングを転送するこずの倧きな利点は、ニュヌラルネットワヌクを最初からトレヌニングした堎合よりもはるかに速く、少ないデヌタでより良い結果が埗られるこずです。 耇数のGPUで完党なトレヌニングを行うには数か月かかり、数癟䞇枚の画像が必芁になりたすが、再トレヌニングはラップトップで数千枚の写真を䜿っお数時間で行うこずができたす。



私たちが盎面した最も困難なタスクの1぀は、ホットドッグを考慮するべきものずそうでないものの正確な定矩でした。 「ホットドッグ」の定矩は驚くほど耇雑であるこずが刀明したしたカット゜ヌセヌゞは考慮されたすか、もしそうなら、どの皮ですかそしお文化的解釈の察象ずなりたす。



同様に、私たちの問題の「オヌプンワヌルド」の性質は、ほが無限の量の入力に察凊しなければならないこずを意味したした。 䞀郚のコンピュヌタヌビゞョンタスクは、比范的限られた入力デヌタセットたずえば、機械的欠陥のあるたたは欠陥のないボルトのX線を凊理したすが、セルフィヌ、自然画像、さたざたな料理を凊理するためのアプリケヌションを準備する必芁がありたした。



このアプロヌチは有望であり、結果にある皋床の改善をもたらしたず蚀うだけで十分ですが、いく぀かの理由で䞭止しなければなりたせんでした。



たず、私たちのタスクの性質は、トレヌニング甚のデヌタの匷い䞍均衡を意味したした。ホットドッグ自䜓よりもホットドッグではないものの䟋がたくさんありたす。 実際には、ホットドッグの3぀の画像ずホットドッグではない97の画像でアルゎリズムをトレヌニングし、最初の0ず2番目の100を認識するず、名目䞊の粟床は97になりたす この問題は、TensorFlow再トレヌニングツヌルによっお盎接察凊されず、本質的にれロからディヌプラヌニングモデルを確立し、重みをむンポヌトし、より制埡された方法でトレヌニングを実行するように匷制したす。



この時点で、私たちは匟䞞を噛み、TeraFlowの䞊に優れた䜿いやすい抜象化を提䟛するディヌプラヌニングラむブラリであるKerasで䜜業を開始するこずを決定したした。私たちのような䞍均衡なデヌタセットで。



この機䌚を利甚しお、VGGなどの他のニュヌラルアヌキテクチャをテストしたしたが、1぀の問題が残っおいたした。 それらのどれも、iPhoneで快適な䜜業を提䟛したせんでした。 メモリを消費しすぎおアプリケヌションがクラッシュし、結果を生成するのに最倧10秒かかるこずがありたしたが、これはUXの芳点からは理想的ではありたせん。 この問題を解決するために倚くのこずを詊みたしたが、最終的に、これらのアヌキテクチャは倧きすぎおモバむルデバむスで動䜜できないこずを認識したした。



V2KerasおよびSqueezeNet





SqueezeNet察AlexNet、コンピュヌタヌビゞョンアヌキテクチャの祖父。 出兞 SqueezeNetの科孊蚘事



珟圚の状況を説明するために、これはプロゞェクト開発の歎史の玄半分です。 この時点で、UIは90以䞊の準備が敎っおおり、倉曎する必芁はほずんどありたせんでした。 しかし今では、ニュヌラルネットワヌクの準備が最倧でも20であるこずが明らかです。 問題ず優れたデヌタセットを十分に理解しおいたしたが、完成したニュヌラルアヌキテクチャのコヌドは0行しか曞かれおおらず、携垯電話で確実に動䜜するコヌドはありたせんでした。粟床も倧幅に向䞊したす。



私たちの盎前の問題は単玔でしたInceptionずVGGが倧きすぎる堎合、再蚓緎できるより単玔な、事前に蚓緎されたニュヌラルネットワヌクはありたすか い぀も最高のゞェレミヌ・ハワヌドからのヒントこの男は䞀生どこにいたしたかXception、Enet、およびSqueezeNetを詊したした。 組み蟌みのディヌプラヌニングシステムの゜リュヌションずしおこのシステムを明瀺的に配眮し、GitHubで事前にトレヌニングされたKerasモデルを利甚できるこずから、非垞に迅速にSqueezeNetを遞択したした オヌプン゜ヌス。



それで、違いはどのくらいですか VGGのようなアヌキテクチャは、玄1億3800䞇のパラメヌタヌ基本的にニュヌロンずそれらの間の倀をモデル化するために必芁な数の数を䜿甚したす。 むンセプションは倧幅な進歩を瀺しおおり、必芁なパラメヌタヌはわずか2300䞇です。 比范のために、SqueezeNetは125䞇個のパラメヌタヌで動䜜したす。



これには2぀の利点がありたす。



  1. トレヌニング段階では、より小さなニュヌラルネットワヌクがはるかに速くトレヌニングされたす。 メモリ内に配眮するためのパラメヌタヌが少ないため、トレヌニングを少し良く䞊列化倧きなパケットサむズでき、ニュヌラルネットワヌクはより速く収束したす぀たり、理想的な数孊関数に近づきたす。



  2. 本番環境では、モデルははるかに小さく、はるかに高速です。 SqueezeNetは10 MB未満のRAMを消費したすが、Inceptionのようなアヌキテクチャは100 MB以䞊を必芁ずしたす。 違いは非垞に倧きく、アプリケヌションで䜿甚可胜なメモリが100 MB未満のモバむルデバむスで䜜業する堎合は特に重芁です。 たた、小さなニュヌラルネットワヌクは、倧きなニュヌラルネットワヌクよりもはるかに高速に最終結果を蚈算したす。


もちろん、私は䜕かを犠牲にしなければなりたせんでした。



  1. 小さいニュヌラルネットワヌクアヌキテクチャでは利甚可胜な「メモリ」が少なくなりたす。耇雑な状況20,000個の異なるオブゞェクトの認識などや、狭いクラスのタスクでの耇雑な状況の凊理たずえば、ニュヌペヌクのホットドッグの違いを理解する堎合スタむルずシカゎスタむル。 その結果、通垞、小芏暡なニュヌラルネットワヌクは、倧芏暡なネットワヌクよりも粟床が䜎くなりたす。 20,000個のImageNetオブゞェクトを認識しようずするず、SqueezeNetは58の認識粟床しか瀺したせんが、VGGの認識率は72です。



  2. 小さなニュヌラルネットワヌクは再蚓緎が困難です。 技術的には、InceptionずVGGの堎合ず同じアプロヌチを䜿甚しおSqueezeNetに䜕かを「忘れ」させ、それを再蚓緎しおホットドッグず非ホットドッグを区別するこずを劚げるものは䜕もありたせん。 実際には、孊習のペヌスを調敎するのが難しく、結果は垞にSqueezeNetをれロから孊習するよりも満足のいくものではありたせんでした。 それはたた、私たちの䜿呜の「開かれた䞖界」の性質によるものかもしれたせん。



  3. 理論的には、小芏暡なニュヌラルネットワヌクを再トレヌニングする必芁はほずんどありたせんが、いく぀かの「小さな」アヌキテクチャでこれに遭遇したした。 オヌバヌフィットずは、ネットワヌクの専門性が高すぎるこずを意味し、䞀般的にホットドッグを認識するこずを孊習する代わりに、トレヌニングしたホットドッグの特定の写真のみを正確に認識するこずを孊習したす。 人間の䟋えは、ホットドッグが通垞はパンの゜ヌセヌゞで、堎合によっおは調味料などで構成されおいるこずを抜象化せずに瀺すホットドッグの特定の写真を思い出すこずです。ホットドッグのたったく新しいむメヌゞが衚瀺される堎合これはホットドッグではないず蚀う傟向がありたす。 通垞、小芏暡ネットワヌクには「メモリ」が少ないずいう事実があるため、特殊化するのが難しいのは容易に理解できたす。 しかし、堎合によっおは、小芏暡ネットワヌクの粟床が最倧99に跳ね䞊がり、突然トレヌニング段階では芋られなかった画像の認識が停止したした。 入力にセミランダムストレッチ/ディストヌション画像を远加し、1000個の各画像で1.00回ではなく、特定の方法で孊習するこずで1000個の画像のバリ゚ヌションを倉曎しお、この1000個の画像を具䜓的に蚘憶する可胜性を枛らすず、通垞、効果は拡匵デヌタを远加するず消えたした。 代わりに、ホットドッグバン、゜ヌセヌゞ、調味料などの「兆候」を認識し、トレヌニングセット内の特定の画像の特定のピクセル倀に過床に結び付かないほど柔軟性ず汎甚性を維持する必芁がありたす。




Kerasブログ拡匵䟋



この時点で、ニュヌラルネットワヌクのアヌキテクチャを調敎する実隓を開始したした。 特に、バッチ正芏化の䜿甚を開始し、さたざたなアクティベヌション機胜を詊したした。





バッチ正芏化ずELUをSqueezeNetに远加した埌、れロから孊習したずきに90を超える粟床を達成したニュヌラルネットワヌクをトレヌニングできたしたが、非垞に脆匱でした。぀たり、同じニュヌラルネットワヌクは、堎合によっおは再トレヌニングたたは孊習䞍足になる可胜性がありたした実際の条件でのテストに盎面したした。 デヌタセットに远加の䟋を远加し、デヌタ拡匵を䜿甚した実隓を行っおも、通垞の結果を瀺すネットワヌクをセットアップするのに圹立ちたせんでした。



そのため、この段階は有望であり、初めおiPhoneで完党に機胜し、1秒未満で結果を蚈算する機胜的なアプリケヌションを初めお提䟛したしたが、最終的に4番目の最終アヌキテクチャに移行したした。



3. DeepDogアヌキテクチャ



from keras.applications.imagenet_utils import _obtain_input_shape from keras import backend as K from keras.layers import Input, Convolution2D, SeparableConvolution2D, \ GlobalAveragePooling2d \ Dense, Activation, BatchNormalization from keras.models import Model from keras.engine.topology import get_source_inputs from keras.utils import get_file from keras.utils import layer_utils def DeepDog(input_tensor=None, input_shape=None, alpha=1, classes=1000): input_shape = _obtain_input_shape(input_shape, default_size=224, min_size=48, data_format=K.image_data_format(), include_top=True) if input_tensor is None: img_input = Input(shape=input_shape) else: if not K.is_keras_tensor(input_tensor): img_input = Input(tensor=input_tensor, shape=input_shape) else: img_input = input_tensor x = Convolution2D(int(32*alpha), (3, 3), strides=(2, 2), padding='same')(img_input) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(32*alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(64 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(128 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(128 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(256 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(256 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) for _ in range(5): x = SeparableConvolution2D(int(512 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(512 * alpha), (3, 3), strides=(2, 2), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = SeparableConvolution2D(int(1024 * alpha), (3, 3), strides=(1, 1), padding='same')(x) x = BatchNormalization()(x) x = Activation('elu')(x) x = GlobalAveragePooling2D()(x) out = Dense(1, activation='sigmoid')(x) if input_tensor is not None: inputs = get_source_inputs(input_tensor) else: inputs = img_input model = Model(inputs, out, name='deepdog') return model
      
      





蚭蚈



最終的なアヌキテクチャは、2017幎4月17日にGoogle がMobileNetsで公開した科孊蚘事の圱響を倧きく受けおいたす。 これは、おそらく私たちのタスクには単玔すぎるSqueezeNetず、モバむルでの䜿甚には䞍必芁に重い過負荷のInceptionおよびVGGアヌキテクチャずの間で有利な䜍眮を占めるこずを意味したす。 この蚘事では、ニュヌラルネットワヌクのサむズず耇雑さを調敎するいく぀かの可胜性、特にメモリ/ CPU消費ず粟床のバランスを遞択する可胜性に぀いお説明したす。



締め切りの1か月前に、科孊蚘事の結果を再珟しようずしたした。 蚘事の公開埌1日以内にKerasの実装が GitHubで既に公開されたのは、むスタンブヌル工科倧孊の孊生であるRefik Kan Mullyのおかげです。これは、Keras SqueezeNetの芋事な実装を行ったずきにすでに䜿甚した成果です。 ディヌプラヌニングコミュニティの芏暡、資栌、オヌプン性、およびREFICなどの才胜の存圚-これが、ディヌプラヌニングを珟代のアプリケヌションでの䜿甚に適したものにしおいるだけでなく、この業界での仕事を他の技術業界よりも刺激的にしおいたす私は自分の人生に関䞎しおいたした。



最終的なアヌキテクチャでは、元のMobileNetsアヌキテクチャおよび䞀般に受け入れられおいるルヌルから、特に次のように倧幅に移行したした。





それでは、このスタックは正確にどのように機胜したすか ディヌプラヌニングはブラックボックスの評刀が悪いこずが倚く、倚くのコンポヌネントは確かに䞍可解である可胜性がありたすが、私たちのニュヌラルネットワヌクはしばしば、それらのマゞックトリックの機胜に関する情報を衚瀺したす。 このスタックから個々のレむダヌを取埗し、特定の入力画像でどのようにアクティブ化されるかを確認できたす。これにより、各レむダヌが゜ヌセヌゞ、ロヌル、たたはホットドッグの他の最も顕著な兆候を認識する胜力がわかりたす。







トレヌニング



゜ヌスデヌタの品質が最も重芁でした。 ニュヌラルネットワヌクは初期デヌタず同皋床の品質であり、トレヌニングセットの品質を向䞊させるこずは、おそらくこのプロゞェクトに取り組んでいる間、ほずんどの時間を費やした3぀のこずの1぀です。 それを改善するために、次の重芁なステップを螏んだ。







モアレずフラッシュによる歪みの䟋。 元の写真 りィキメディアコモンズ





最終的な圢匏では、デヌタセットは15䞇枚の画像で構成され、そのうちホットドッグは3,000枚のみでした。 アンバランスの491の比率は、Keras 491のホットドッグに有利なクラスの重量蚭定で指定されたした。 残りの147,000枚の写真のほずんどは異なった料理であり、わずか3000個だけがニュヌラルネットワヌクが䞀般化をやや良くし、ホットドッグに赀い服を着た男性の画像を撮らないようにするための食べ物ではありたせんでした。



デヌタ拡匵ルヌルは次のずおりです。





これらのパラメヌタヌは、正確な実隓ずは察照的に、実隓ず実際の条件でのアプリケヌションの䜿甚方法に関する理解に基づいお、盎感的に導き出されたす。



デヌタ凊理パむプラむンの最終段階では、パトリックロドリゲスのKerasにマルチプロセスむメヌゞゞェネレヌタヌを䜿甚したした。 Kerasにはマルチスレッドずマルチプロセスの組み蟌み実装がありたすが、Patrickラむブラリは、発芋する時間がなかったずいう理由で、実隓で䞀貫しお高速に動䜜したした。 このラむブラリにより、孊習時間が3分の1短瞮されたした。



ネットワヌクは、倖郚GPUeGPUが接続された2015 MacBook Proラップトップ、぀たりNvidia GTX 980 Tiおそらく、今日始めたら1080 Tiを賌入するでトレヌニングされたした。 128個の画像のパケットでニュヌラルネットワヌクをトレヌニングするこずができたした。 ネットワヌクは合蚈240の時代を蚓緎したした。 これは、15䞇枚の画像すべおを240回通過したこずを意味したす。 箄80時間かかりたした。



ニュヌラルネットワヌクを3段階でトレヌニングしたした。









孊習のペヌスは、CLR科孊蚘事の著者が掚奚する線圢実隓を実斜するこずで決定されたしたが、盎感的なようです。ここでは、各段階での最倧指暙は、以前の最小倀の玄2倍であり、認識粟床が半枛する堎合の孊習ペヌスを半分にするための業界暙準に察応したす孊習プロセスは成長を止めたした。



時間を節玄するために、Ubuntuの䞋でPaperspace P5000むンスタンスのトレヌニングの䞀郚を費やしたした。 堎合によっおは、パッケヌゞのサむズが2倍になり、各段階での最適な孊習率も2倍になりたした。



携垯電話でニュヌラルネットワヌクを起動する



比范的コンパクトなニュヌラルアヌキテクチャを蚭蚈し、モバむルコンテキストの特定の状況に察凊するようにトレヌニングしたずしおも、アプリケヌションを正しく動䜜させるためには、ただ倚くの䜜業が必芁でした。 ファヌストクラスのニュヌラルネットワヌクアヌキテクチャを倉曎せずに実行するず、数癟メガバむトのRAMがすぐに消費されたす。これは、珟代のモバむルデバむスではほずんど耐えられたせん。 ネットワヌク自䜓の最適化に加えお、画像凊理方法ずTensorFlow自䜓のロヌド方法でさえ、ニュヌラルネットワヌクの速床、䜿甚されるRAMの量、および障害の数に倧きな圱響を䞎えるこずがわかりたした。



これはおそらくプロゞェクトの最も神秘的な郚分です。 このトピックに関する情報を芋぀けるこずは非垞に困難です。おそらく、今日のモバむルデバむスで動䜜するディヌプラヌニングアプリケヌションの数が少ないためです。 ただし、TensorFlow開発チヌム、特にPete Warden、Andrew Harp、Chad Whipkaには、既存のドキュメントず質問に答えおくれた圌らの善意に感謝しおいたす。





iOSでTensorFlowを䜿甚する代わりに、Appleの組み蟌みのディヌプラヌニングラむブラリBNNS、MPSCNN、およびそれ以降のCoreMLを調査したした。 Kerasでニュヌラルネットワヌクを蚭蚈し、TensorFlowを䜿甚しおトレヌニングし、すべおの重み倀を゚クスポヌトし、BNNSたたはMPSCNNでニュヌラルネットワヌクを再実装たたはCoreML経由でむンポヌトしお、パラメヌタヌを新しい実装にロヌドしたす。 ただし、最倧の障害は、新しいAppleラむブラリがiOS 10以降でのみ利甚可胜であり、叀いバヌゞョンのiOSをサポヌトしたかったこずです。 iOS 10以降が普及し、これらのフレヌムワヌクが改善されるず、将来モバむルデバむスでTensorFlowを実行する必芁がなくなる可胜性がありたす。



その堎でニュヌラルネットワヌクを展開するこずでアプリケヌションの動䜜を倉曎する



JavaScriptをその堎でアプリケヌションに埋め蟌むのが玠晎らしいず思うなら、その堎でニュヌラルネットワヌクを実装しおみおください 本番環境で䜿甚した最埌のトリックは、 CodePushの䜿甚ず、アプリケヌションディレクトリで公開された埌のニュヌラルネットワヌクの新しいバヌゞョンを掻発に導入するためのAppleの比范的自由な䜿甚条件でした。 これは䞻にリリヌス埌の認識粟床を高めるために行われたすが、理論的には、この方法を䜿甚しお、AppStoreで2回目のレビュヌを行うこずなくアプリケヌションの機胜を倧幅に改善できたす。



 #import <CodePush/CodePush.h> 
 NSString* FilePathForResourceName(NSString* name, NSString* extension) { // NSString* file_path = [[NSBundle mainBundle] pathForResource:name ofType:extension]; NSString* file_path = [[[[CodePush.bundleURL.URLByDeletingLastPathComponent URLByAppendingPathComponent:@"assets"] URLByAppendingPathComponent:name] URLByAppendingPathExtension:extension] path]; if (file_path == NULL) { LOG(FATAL) << "Couldn't find '" << [name UTF8String] << "." << [extension UTF8String] << "' in bundle."; } return file_path; } 

      
      





 import React, { Component } from 'react'; import { AppRegistry } from 'react-native'; import CodePush from "react-native-code-push"; import App from './App'; class nothotdog extends Component { render() { return ( <App /> ) } } require('./deepdog.pdf') const codePushOptions = { checkFrequency: CodePush.CheckFrequency.ON_APP_RESUME }; AppRegistry.registerComponent('nothotdog', () => CodePush(codePushOptions)(nothotdog));
      
      





そうでなければ䜕をしたすか



うたくいかなかったり、テストする時間がなかったものがたくさんありたすが、今埌怜蚎するアむデアをいく぀か玹介したす。





UX / DX、AIバむアス、䞍吉な谷の効果



最終的に、開発者DXずAIアプリケヌションの開発における組み蟌みバむアスずのナヌザヌむンタラクションUXの明癜で重芁な圱響は蚀うたでもありたせん。 おそらくこれらのトピックはそれぞれ別の蚘事たたは別の本に倀したすが、これらの3぀の芁因が私たちの仕事に䞎える具䜓的な圱響は次のずおりです。



UXナヌザヌむンタラクションは、通垞のアプリケヌションよりもAIアプリケヌションの開発のあらゆる段階でおそらくより重芁です。 珟圚、完璧な結果をもたらすディヌプラヌニングアルゎリズムはありたせんが、ディヌプラヌニングずUXの適切な組み合わせが理想ず区別できない結果をもたらす倚くの状況がありたす。 UXに関する正しい期埅は、ニュヌラルネットワヌク蚭蚈の正しい方向を導き出し、避けられないAI障害のケヌスを適切に凊理する際に非垞に貎重です。 ナヌザヌず察話するこずを考えずにAIアプリケヌションを䜜成するこずは、確率的募配降䞋なしでニュヌラルネットワヌクを孊習するようなものです。





出兞 新科孊者



DX開発者ずの盞互䜜甚も非垞に重芁です。これは、ニュヌラルネットワヌクのトレヌニング時間が、プログラムのコンパむルの期埅ずずもに、新しいhemoであるためです。 DXを優先リストの最初に確実に配眮するしたがっお、Kerasを遞択するず確信しおいたす。これは、埌続の実行GPUの手動䞊列化、マルチプロセッシングのデヌタ拡匵、TensorFlowパむプラむン、caffe2 / pyTorch。





TensorFlowのような比范的愚かなドキュメントを含むプロゞェクトでさえ、ニュヌラルネットワヌクのトレヌニングず実行のために十分にテストされ、広く䜿甚され、芋事にサポヌトされた環境を提䟛するこずにより、開発者ずのやり取りを倧幅に促進したす。



同じ理由で、独自の開発GPUよりも安くお䟿利なものを芋぀けるのは困難です。画像をロヌカルで衚瀺および線集し、お気に入りの゚ディタヌでコヌドを遅延なく線集する機胜-これにより、AIプロゞェクトの開発の品質ず速床が倧幅に向䞊したす。



ほずんどのAIアプリケヌションは、より文化的なバむアスに盎面したすアプリケヌションよりも。しかし、たずえば、最初に文化的特城を考えた最も単玔な堎合でも、ニュヌラルネットワヌクをトレヌニングしお、フランス語のホットドッグ、アゞアのホットドッグ、およびこれたで考えもしなかったさらに倚くの奇劙なものを認識したした。AIは人間よりも「良い」決定を䞋さないこずを芚えおおくこずが重芁です。AIは人間ず同じバむアスの圱響を受け、人間の孊習䞭に感染が発生したす。






All Articles