主張
技術者を過小評価しやすい要因として、「その動作って、〇〇にある実装を△△に移植しただけでよね」というのがある。しかし、この文章では 「最新実装のトレースも成果である」と主張する。
その技術分野でのここ数年での進歩を取り入れて、実際に動作させることは、誰にでもできる簡単なことではない。それを無視したうえで「その動作って、〇〇にある実装を△△に移植しただけでよね」とすることは、現場の技術者を過小評価することになっているのではないかと考える。
機械学習分野の現在の状況
- 最近の変化は激しい。 3ヶ月もたつと状況が変わるほどの成果がOSSででてくることがある。
- その状況を追っかけて、実機で動かせるようにするのも、必ずしも誰にでもできることではない。
- 多数の英語論文を読み、本当に読むべき論文を見つけて、実装を動作させる。
- その分野で、前々からどういうことが問題になり続けていたか、それに対する最近の手法の結果はどうなのか
- 複数のライブラリを組合せての動作は、トラブルを生じがち
- 既存のライブラリと今回のライブラリがバッティングする。
最新実装をトレースできると見えること
- その実装が可能にすることとしないこと
- その実装の学習済みモデルの大きさ
- その実装の計算量の大きさ
- 対象とするデバイスでの利用可能性の程度
- その実装をモジュールとして利用するときの利用のしやすさ
論文だけでは見えてこない部分が、実行結果から見えてくる
- その実装で扱っているデータの難しさ
- 学習データセット・評価データセットの特徴
- そのデータセットでの問題点が見えてくる
意味のあるアプローチをするための様々な可能性
- その実装をベースに考える範囲
- その実装をモジュールとして利用する。
- deply先に合わせて最適化する
- 学習結果の弱点を補う方法を考える。
- 損失関数の定義を変更する。
- ネットワーク構造を書き換える。
- 課題の定式化の枠組みを考え直す。
- ほんとうにほしい定式化は、それとは違うんじゃないかという疑い
- 例:ブロックマッチングベースのステレオ計測は、本当にほしい3D計測とはちがう。
- そのタスクは、8割がた解決しているとして、別の部分のタスクを考えることができる。
- 画像認識・機械学習タスクのほとんどは、その判断のあとにどういう行動を行うようにするかで価値を持っている。
- だから、ほんとうに意味を持つ部分を考えることができるようになる。
自らもっていた予測の妥当性
- その分野である程度の経験を積んだエンジニアの場合、技術はこういう方向に開発されていくに違いないという方向性についての予測を持っていたりする。
- その予測に合致する論文があるはずだ。予測に合致する論文を見つけた時に、「やっぱりこうするよね」と思う。
- 自らの予測にないアプローチで、効果的な結果を出しているものがあると、「こういうやり方あるんだ」と感心する。
- そういうことの積み重ねで自分の判断力を養っていく。
最新実装のトレースの中でエンジニアは学んでいく
- 価値のある実装をするためには、それができる程度に学んでいく必要がある。
- なにも学ばないうちに、意味のある実装を作り出せることはない。
非専門家が誤解しがちなこと
- その分野での近年の進歩と残っている課題を把握できるのは、その分野を十分に調査している人に限られるということ。
- その分野でテーマを限っても100件を超える論文と実装からどれに着目すればいいのかを探り当てること
- その論文と実装を見つけ、目的の改良の様子を確認すること
- 自分のマシンで実際にトレースできることを確認する。
- それをdeploy先の環境に合わせて最適化すること(例 TensorRT)
- 自分の用途にそったAPIを実装すること
- それを開発中のマシンと接続されたカメラで動作させること。
これら、「単に最新の実装を動かしてみただけじゃん」の中身なんです。
すべての実装は、実装に成功したあとは、当たり前に実装できると誤解される
これらは、ヒトの認知的な特性のために生じやすい。
達成したことの難しさについての理解を達成前に知りうる立場の人はごくわずかだ。
大多数の社内のメンバーは、そんな開発がされていることさえ知らない。
大多数の社内のメンバーが知るときには、既に達成されたあとだ。
だから、その作業がどれくらい難しくて、すごいことなんだということを、知ってもらえることはない。
- ヒトの脳は時系列の順序さえ入れ替えて理解する。
- ヒトの脳にとって大事なことは、現在の状況の理解とほんの少し先の予測だ。
- 過ぎ去ったことを正確に覚えようとはしない。
- 覚えやすいように事実を歪める。
それらの理由のため、「当たり前に実装できるものを実装しただけ」と誤解される。
技術的な難易度を理解する気のない人たちには、それが簡単じゃないこと、
少なくとも誰でもできることではないと伝えても、とてもわかってはもらえない。
ヒトは自分の認知できない内容は重要な内容ではないと思いたがる
- エンジニアのあなたは、あなたが担当しているエンジニアリングの重要性がわかっているでしょう。
- 別の分野の方々は、それぞれの担当している分野の重要性がわかっています。
- と同時に、ヒトは、自分の認知できない内容は重要ではないと思い込みたがるバイアスを持っているようです。
- ですから、自分の認知できない範囲は、重要ではないとしてフィルタリングしてしまうようです。
そのようなバイアスの「合理性」
- ヒトの認知能力は限られています。
- 限られたリソースの範囲で結果を出すためには、「自分の認知できない内容」が本質的に重要であったとしても、それ以外の要因でうまくいくならば(うまくいったように見えるならば)、それで良しとしてしまうものなのです。
- 「演奏の音だけ」で判断するのが適切な場合でも、それ以外の要因で判断をしてしまうものなのです。
その分野を熟知しているから対策をとれているのに、誰がやってもうまくいくと誤解される
- 例:機械学習の分野では、学習・推論の実装がオープンソースで提供されている。
- 公開されている学習データのままで、再学習をするのは、ある程度の経験があればできる。
- だから、ふつうの人は、そのレベルのエンジニアでも、カスタムデータでも学習ができるに違いないと思う。
実際には、素人がはまり込む多くの落とし穴
- 例:機械学習の経験が浅いが場合、実用水準の結果にたどり着くのが大変である。
「機械学習 落とし穴」、「機械学習 失敗例」などのキーワードで検索してみてほしい。
山ほど事例がでてくるだろう。
開発開始から半年で、機械学習結果が良好になるデータセットを構築したエンジニアは、そのような対策をとっていたのです。
開発者は活用する方法を伝える、それがどれだけ大変だったかは語らない。
- ただ、そのようなノウハウは、引き継ぎ資料の中で伝えればいいだけの話です。
- 知る必要のない人に話をしても、単なる自慢話にしか聞こえません。
ほとんどの開発者は、好きなように開発することは許されない
- プロジェクトの目的の中で、その分野の技術は部品・モジュールの一つにすぎない。
- 例:3D計測は、機器の中の1つの部品にすぎない。
その機器が使われる状況の中での、改善するべき優先順序の中でしか、開発するチャンスはない。
だから、アイディアを思いついても、それを実際に試してみる機会はなかなかやってこない。
堅実なエンジニアは、独自実装をする前に、最新の実装の評価を試みる
- 堅実なエンジニアにとって、独自性よりも実用性を重視する。
- だから、必要になるまで独自実装には着手しない。
- だから、「独自実装ができない人」と勘違いされる。
どんなに優秀でも、一人では結果を出しきれない
- ソフトウェアエンジニア・機械学習のエンジニアの場合、どんなに優秀でもたった一人でできることには限りがある。
- 子ども向けのアニメのように、たった一人エンジニアが市販車を自動運転車両に改造してしまうということはありえない。
エンジニアは、経営のその時の思いつきの価値観で評価される。しかも、過去数年分の結果を、今思いついたばかりの評価基準で
- 経営という状況は、エンジニアに対する評価基準を急速に変えてしまいます。
- そのため、過去数年・半年とか開発してきた内容に対する評価基準が簡単に変わってしまいます。
- 当初の約束にしたがって出してきた実績も、新しい評価基準では無意味となります。
- そのため、「今の状況を理解していない、間違った方向性で開発をしている不届き者」という位置づけにいつのまにかされています。
「ほんとうは事業でこういうアプローチも可能なのに」なんて、悪口としてしか聞いてくれません
- 現体制への提案は、現体制への不満と受け取られることは、いつの時代・どこの社会でも起きることです。
「中国東北部の森林資源の減少と劣化に関する歴史の分析」がふつうに発表できるか、そうじゃないかは、時代と社会によって異なるんです。 - 提案したい内容があるという時点で、悪口としてしか受け止められないことは、よく起こることなんです。
新しい事業展開を開くための技術はまだ結果を出していない。
- 新しい事業展開を開くための技術は、いつだってまだ結果を出していないものです。
- もう少しで、事業に展開できる可能性のあるものと、可能性がないものです。
- でも共通なことは、「まだ事業に貢献していない」という点です。
エンジニアを専門バカと決めつけたがる
- エンジニアを専門バカと決めつけたがる人はある程度います。
- 動機:
- 自分たちの優位性を確保したい。エンジニアに自分たちの領域に入り込んでほしくない。
- ですから、適切なフィードバックをすることもなしに、専門バカ呼ばわりをします。
- いま、市場で一番期待されている中身が何かを開発陣にまったく伝えていないのに、それが開発陣が知らないことで専門バカ呼ばわりをします。
- うまくいかない理由を自分たち以外のところのせいにしたい。
- あるべき状況:
- 何が、今の事業の課題になっているのかをエンジニアに伝えてますか
- それをふまえたうえで、エンジニアが自由に提言できる環境を作っていますか
- エンジニアと営業の分野の人が直接対話できる状況を作っていますか
結果、「最新技術をトレースできるエンジニア」を捨てることになる
- 「当たり前に実装できるものを実装しただけ」
- 誰がやってもうまくいくと誤解される
- ヒトは自分の認知できない内容は重要な内容ではないと思いたがる
- どんなに優秀でも、一人では結果を出しきれない
- エンジニアは、経営のその時の思いつきの価値観で評価される。しかも、過去数年分の結果を、今思いついたばかりの評価基準で。
という条件がそろっているんです。
結果は見えていますね。
そう、まだ事業に貢献していないエンジニアは捨て去ろうという判断になるのは、とても自然な結論です。
「最新技術をトレースできるエンジニア」を捨てた時に起きること
-
いま、その分野で起きていることの意味をまともに判断できる技術的素養のある人がいない
-
それが事業環境をどう変えていってしまうのかを理解しようともしない。
- 例:視覚言語モデルは、従来の産業用ロボットのティーチングの常識を変えてしまう。
そのため、従来の産業用ロボットの売り方、利益構造を大幅に変えてしまう。
- 例:視覚言語モデルは、従来の産業用ロボットのティーチングの常識を変えてしまう。
-
将来の技術の予測がつかないので、事業戦略を間違えた方向に導いてしまう。
-
最新の技術をトレースして見せたことで、「技術を買えばいいじゃない」という間違えた認識を持たせてしまう。
実際には、技術を買うためには、自力で開発できるくらいの力量を持たなければ、適切なものをブラックボックスで選び出すことはできないというのに。 -
ヒトは、自分の理解できる範囲についてフィルタリングした範囲の情報だけで、物事を判断する。
ヒトは紫外線画像でチョウチョをみることはないし、超音波領域の音声信号を聞き取ることもしない。
経理情報というフィルタリングだけで物事を見るように訓練されたヒトにとっては、それ以外の要因が経営にどう影響するのかを考慮に入れることはない。
ヒトがモンシロチョウのオス・メスの区別がつかないように、ごく自然に無視できてしまっているのだ。
最新の技術をトレースできるエンジニア」を捨てた時に起きることがあるなんてのは、ヒトにとって紫外線画像のようなもんなんだ。
企業で実際に起きていること
- 「まだ事業に貢献していない」技術を捨て去ること
- 経営者の理解の能力が及ばない部分に対して、過度の期待や過小評価のどちらかに傾く。適切な判断とフィードバックがなされることはない。
例:『営業利益率は現状を大きく超える10・1%に設定した。』 - 経営者にとって、『長期的な成長を図るには自社単独での「さらなる経営資源の投入は難しい状態」』と判断して、事業を売却する。
- 「次の成長柱を育成すべく買収を繰り返し」ても、「『設定についてもう少しリスクケースを見るべきだった』」ということになりかねない。
蛇足:
『』で囲まれた部分をキーワードに検索すれば、そのような状況の進行事例を見ることができます。
付記
あるツイート
「大谷選手の試合中の動作をいくら観察しても大谷選手のように活躍できるようにはならない。
しかし、githubにある SOTA(State-of-the-Art)の実装は、最高の性能をあなたが実行するようにしてくれる。
いわば、あなたが大谷選手のように結果を出せるのだ。」