研究漬けだった学生がスタートアップ約半年で取り組んだこと

あけましておめでとうございます!
アダコテックでエンジニアをしている井上耕太朗です。
昨年まで韓国にて旧暦のお正月をしばらく過ごしていた私ですが、今年は久しぶりに日本のお正月を過ごせたような気がします。

年末というと、普段テレビを持たない私が1年の中で唯一テレビを見る期間となります。昔は紅白歌合戦なんて映されようものなら、携帯ゲーム機で遊ぶぐらいしか選択肢のなかった私でしたが、今年は事業としての紅白歌合戦の取り組みの変化に着眼して視聴を楽しむことができ、個人としての成長を実感するとともに、益々の婚期の遠ざかりを確信した年末でした。

小話はともかく、昨年は主に以下のような技術系の記事の執筆をZennにて励みましたが、新年を迎えるにあたり今回は昨年の振り返りと今年の抱負についてまとめたいと思います。

昨年の取り組みと振り返り

昨年4月入社から12月までの8ヶ月間はまさに怒涛の日々。仕事も技術も実戦で覚え、入社のほぼ翌週には初出張となり、名刺交換の方法は直前のレンタカー店の前でCEOから直伝いただくという他ではまず経験できないスタートを切りました!前も後ろもARRという単語もよくわからない中、4月からは以下の主に3つの業務に取り組みました。

  1. お客様のデータの分析業務
    いわゆる初期検証やPoC(概念実証)で、お客様の画像から目標精度を達成できるような検査モデルや方法を提案します。アダコテックのエンジニア業務の中で最も直接的にお客様へ価値を提供する業務で、昨年の比重は最も大きかったです。

  2. 新たな技術の基礎研究・開発
    分析業務で活かせそうな次なる技術の検証や開発です。PoCでの新規の取り組みや気付きがダイレクトに反映される業務で、最近は耕太朗式〇〇みたいな社内用語ができつつあります名前はもうちょっとなんとかならないかと考えていますw

  3. 社内業務効率化に関する取り組み
    アダコテックは社外への自動化提案をしつつも、社内業務は結構泥臭いことの積み重ねだったりします。手戻りも多く、担当者によって精度に差が出ることに課題を感じたのでオレオレツールを作ってしばらく運用していたのですが、とても良い感じなので正式採用の流れにあります

これらの取り組みに関するエピソードを自戒を込めて少しご紹介します。

モデル評価値は高いのに精度が出ない!?

検査(判別)モデルには研究論文にも使用される汎用的な指標が存在し、それらの評価指標で検査モデルの性能を評価することで初めて我々はモデルの優劣および改善といった効果を確認することができます。一般的には平均適合率やAUROCといった2~3個の評価指標を見ればおおよその検査モデルの性能の優劣は明らかになり、なるべくそれらの評価値が高いものを選べば良い検査モデルになっているはずです。

しかし、案件によっては評価値の信用性が大きく損なわれる状態に陥りました。例えば画像単位の判別精度であるDetection AUROC(0~1の値で評価され、1に近づくほど高性能)と領域(ピクセルやパッチ)単位の判別精度であるSegmentation AUROCが以下のような2つのモデルがあったとしましょう。

  • モデルA: Detection AUROC 0.95, Segmentation AUROC 0.85

  • モデルB: Detection AUROC 0.93, Segmentation AUROC 0.82

これら2つのモデルを比較したとき、どう考えても友人の借金の肩代わりを賭博で乗り越えようとする人以外は合計評価値の高いモデルAを選ぶでしょう。しかし実ライン(テスト用データ)で動かすと、なんと選ばれたのはモデルBなんてことが頻発しました。

「適合率(不良予想の精度)」を見ろといったご指摘や「過学習(モデルが学習用データに特化しすぎた状態)」の一言で済むならどれほど楽な世界だったことか。これには案件ごとに複雑な事情が絡むことが分かってきました。

過学習のようで過学習ではない少し過学習のモデル

いきなりお前は何を言っているんだ状態の方もいると思いますが、実データを扱うことによる課題は表題に尽きます。

学習用データでうまくいって、テスト用データでうまくいかないなら過学習というのは理論的には正しいでしょう。ただしそれは学習用データとテスト用データの性質が同じ場合に言えることであって、実データが必ずしもその状態を満たすとは言えず、さらに言えば製造業では性質を揃えることが非常に困難な場合も多いです。たとえば以下のような状態が考えられます。

  • テスト用データの製造ロット/材質が学習用と異なる

  • テスト用データだけ撮像条件(光のあたり方や画角)が微妙に異なる

  • テスト用に保存していたワークは長期間保存されていたため、撮像条件を整えて再撮像するタイミングではホコリの付着が学習用と比べて多い

▂▅▇█▓▒░('ω')░▒▓█▇▅▂うっ、うわああぁぁぁぁ!!……
い、いけない、つい取り乱してしましました。
つまり上記事例から言いたいことは、過学習っぽい傾向が過学習なのかという観点から確認が必要ということです。

先程のモデルAとBについても、ミクロな視点では以下の状態が考えられます
・ 同一ロット内のテスト用データに限ればモデルAの精度が良い
・ ホコリで過検出が多い(DetectionやSegmentation AUROCが低い)が、不良の見落とし0を真に実現しているのはモデルB

そして以下の疑問に対する答えは技術的な要件だけでは定まりません
・ 他ロットで実力を発揮しないモデルAは過学習かもしれませんが、同一ロットでモデルAより精度が悪いモデルBは真に良いモデルなのでしょうか?
・ 実ラインでリアルタイムに流したときにはホコリの影響が低減されるとすれば、モデルBを選ばずともモデルAでいけるのではないでしょうか?

技術面での頑張りどころとしてはモデルを更に多角的に評価する必要があり、昨年はモデルに新たな独自の評価指標を10程度組み込み、テスト運用中です。ビジネス的にはこういった齟齬が起きないよう、お客様とデータの内容は慎重に取り決めるか、あるいはモデル精度の評価軸について事前にしっかりと握る必要性を実感しました。

1000行のコードが業務を変えつつある

PoCや過学習が過学習なのか問題の解決に加え、まだまだ改善が必要な部分として、最適化職人の存在があります。最適化職人とはモデルを極限の精度まで高めるべくパラメータを調整(チューニング)する人のことです。多くの研究論文のSoTA精度はこの最適化職人の存z うぁ なにをするっ

最適化職人の存在は自動最適化ツールによって0になるべきであり、弊社環境ではどなたでも自動最適化の実行、そしてパラメータ調整をスピーディーに実施できる状態ではありますが、現実問題として要求精度が究極に高い案件では画像処理や機械学習を熟知した最適化職人がパラメータを振り直す必要があります。それはつまり作業者によって最終的なモデル品質がばらつくということでもあります。

チューニングはモデル作成の中でも最も手間のかかる(手戻りが多い)部分で、改善効果の確認や判断根拠の適切さ評価など、かなり人の目が介在する作業も多いです。そこで昨年はオレオレツールを開発し、以下の機能を提供しています。

  • パラメータをある幅で振り直して自動評価

  • これまで作業者が目視で確認していた部分を独自指標により自動化

  • その他実務上のちょっとした手間の作業を自動化

これらは約1000行程度の短いコードで書かれていますが、工数削減効果が当初自分が想定したよりも高く、これまでは1週間でチューニング含め5モデル程度の作成速度であったところ、1週間で15~20モデル程度作成可能になりました。またこのツールの利点として、チューニングスキームが一定であることからモデル品質が作業者に関わらず均一化されるため、Linuxさえ分かれば誰でも私と同じ成果を上げることができます。

社内業務でも利用され始めているため、更にフィードバックを受けて磨き込んだ後、皆様へご提供できる日を心待ちにしています。

今年の抱負: 雲

新年が始まり、アダコテックではオフサイトミーティングを実施する中、書き初めをすることになりました。私の今年の漢字1字として「雲」を書き、これを「クラウド」と読みます。

昨年はローカルツールやフレームワークなどへのコミットはできたのですが、クラウドまわりでは特にコミットできなかったので、typo修正以外で何かしらのクラウド部分へのコミットが個人的な目標です。まだ自分が使用した経験のない枠組みで動いているので、まずはそのあたりの勉強からですね!

メンバー募集中です!

アダコテックでは現在メンバー募集中です!下記のノートや採用ピッチ資料なども非常に参考になります。

読んでエントリーしてみたくなれば、こちらからエントリーをよろしくお願いいたします!


この記事が気に入ったらサポートをしてみませんか?