こんにちは.changです. 久しぶりにディープ・ラーニングについて書きます. 特に一人で開発する場合の,差別化の難しさについてです.
1. ディープ・ラーニングを始めたきっかけ
ディープ・ラーニングを始めたのはこのブログを開設した時期とほぼ同じです. 約2年前になります. きっかけは,,,会社の仕事に飽きた事ですね. 会社に貢献する程首が締まって,自分の将来につながらないと強く感じる様になりました. 「中途半端な協調性に甘んじていても仕方が無い.自身の技術力で独立していく必要がある」と思ったんです.
勤め先を批判する様な事を言いましたが,サラリーマンあるあるでは無いでしょうか.
で,元々アルゴリズム開発を得意にしていて,かつ趣味でLinuxをやっていた事から適性があると思って飛び付きました. 当時の自身の記事を読むと,随分とナイーブな事から始めたんですね. 良い事なのかは何ともですが,我慢強さは高いのだと思います.
この記事の理解を深める為に紹介すると,僕は某有名私立大学で博士号を取っています. 世間一般的には,数学や理屈に強い部類の人間と言えるでしょう. 英語の論文などもそこそこ読めます. サイバネティクスをかじっていたので,ニューラル・ネットワーク関連の知識も多少ありました.
プログラミングは独学ですが,メーカーでソフトウェア開発に携わってかれこれ8年程になります. ソースを書く仕事ばかりをしている訳ではないですが,設計をしたり,仕様書を作ったりする部分も含めて経験を積みました.
出身で言えば僕は機械系です. 人工知能や計算機についての知見は,その分野を専門としている研究者には遠く及びません. また,僕よりも速くソースを書けるプログラマはごまんといます. ただ,理屈に強く,かつ製品レベルのソフトを作る総合力では,そこそこ世の中と戦えるレベルだと思っています.
2. 何故,ディープ・ラーニングは簡単なのか?
先日の記事*1で座標変換について書きましたが,多くの方は数式が嫌いだと思います. 学校の授業で無理やり覚えさせられた屁理屈を大人になってまで使いたくないと言うか... そんな風に多くの方が嫌いで,難しいと感じる理屈についての耐性で,僕は飯を食っていると言えます.
ディープ・ラーニングにはそういった意味での難しさが少ないのです. 理由は大きく二つあります.
(1) ニューラル・ネットワーク自体が数学的にシンプル
ニューラル・ネットワークは,パーセプトロンの集合です. パーセプトロンは,閾値を超える刺激を受けたら発火するという非常にシンプルな要素です. ニューラル・ネットワーク研究のポイントは,単純な処理を大量に組み合わせ,コンピュータで処理させた事です.
コンピュータが未だ拙かった時代は,難しい理論を考えたり,数式を書くことで技術が発展しました. 今は少し様変わりして,単純作業を大量にコンピュータにやらせた方が,多くの領域で効率が上がるようになりました. ニューラル・ネットワークは正にそれで,CPUの高速化と共に発達してきました. CNN(Convolutional neural network)等の発明も随所には在りますが,基本的には昔から在る技術で,この先も大きく変わりません.
数学的にシンプルなので,ソースを書くのも簡単です. ニューラル.ネットワークをプログラミングする場合,難しいのは理論部分では無く,GPUを用いた高速化です. NVidiaのライブラリを使ったかなりrawなプログラミングになります(なるみたいです). 計算機の専門家では無い僕には,この技術がありません. なので,Googleのtensorflow-gpuを使っています. 皆が使っているのと同じライブラリを使っているので,当然,差は出せないですね.
(2) Google等の大手IT企業が難しいところを作ってしまっている
tensorflow-gpuを使っているという話をしました. ディープ・ラーニングを作るとき,同様に大多数の方がGPU計算を丸投げにする為のフレームワークを使う事になります. この分野において,GoogleのtensorflowとFacebookのPyTorchが覇権を争っています. これに参入するのは中々大変です. Sonyがやってましたけど...
Googleはアルゴリズムの分野でもトップを走ってます. フレームワークが強くて,アルゴリズムも最強だと,闘いようがありません. ディープ・ラーニングを組みたいと思ったら,殆どの場合がGoogleのサンプル(或いはその派生)で事足りてしまいます. 僕自身も,(強化学習を含めて)論文から自分でプログラムを起こしたりはしていません.
また,代表的なディープ・ラーニング(画像のセマンティック・セグメンテーションや分類,チャットボット等)は,GCPやAzure等のクラウドサービス上でコーディングレスで作れるようになっています. 以前に少しだけReNomを使いましたが*2,あれも同じです. 出来合いのソフトウェアで出来ちゃうんです. 僕は一応ソースから書いてますが,こんな無駄な事はやめようと日々思います. 国内大手企業がAIの成功事例みたいなことを言っているニュースを良く見ますが,殆どが出来合いのソフトウェアを使っていると思います. 噛みついた言い方をすると,Googleにダダ乗りの状態です. 差が付く筈が無いですね.
怒られるかも知れませんが,AIはやらないと駄目だけど真面目にやりたくない素材になっています. 補助金目当てか,利益度外視の先進性アピールでやっているというのが,多くの方の本音だと思います.
3. AIの性能を競うには?
ディープ・ラーニングを真面目に作って,その性能で戦うにはどうするのでしょう? 答えは一つで,質の良いデータを集める事です. アルゴリズムを改善する道も在る事はあります. 実際,研究者達が新しいアルゴリズムを次々と発表しています. ただ,アルゴリズムの差はデータの差に比べると微々たるものです. 専門的な言い方をすると,ネットワークの中にdrop outやbatch normalizationを入れるよりも,ラベルを丁寧に付けた方が精度が上がります. 研究者達はAIの実用性を競ってはいません. 同一のデータ・セットを使って数パーセントの検出性能の違いを議論する,内向的な争いをしています. 数字マジックみたいなものなんです.
データを集めるには,インターネット産業にいるとか,古くからセンシングデータを貯めている等のシチュエーションが必要です. 個人レベルではどうしても難しいです.
ラベル付けについても同じです. 大量データにラベルを付けようと思ったら,日雇いバイトとかに精巧に作られたマニュアルを渡すのでしょう. ウェブ上で内職できる仕組みを作るのも良いですね. これは,組織力とか管理能力の問題です. ちゃんとラベルが付けられたかをチェックするAIが必要が欲しくなりますね💦
結局,AIを作る能力って良くわからないんです. GCPやAzureの使い方とかPythonの書き方は学校で教えてくれるみたいです. 人材は集められるでしょう. でも,それだけでは実用的で競争力のあるAIを生み出す事が出来ません.
逆に,AI作れますって,何を持って宣言するのでしょう? 突貫整備された専門学校とか資格やらがありますが...🤔 実態を知らないので何ともですが,正直お薦めできないですね. AI作れますって言って会社に入ると,凄くブラックな仕事をやらされると思います. IT系の仕事のブラックさは,日経ビジネスの極言暴論*3でしばしば紹介されています.
4. 結局何で勝負するか?
日々,考えております... その辺の葛藤も,近々紹介しようと思います.