エンジニアブログです。LayerXの機械学習グループでは、今年8月から9月にかけて、初のサマーインターンシップを開催しました。参加者のスケジュールに合わせた柔軟なプログラムで、3週間という短期間ながら、機械学習技術を核とした機能開発に取り組んでいただきました。インターンシップの運営を通じて、機械学習エンジニアリングにおける特有の課題や、その解決方法について多くの学びがありました。本記事では、その経験を踏まえ、現役の機械学習エンジニアや学生の皆さん、そしてLLM(大規模言語モデル)のような非決定的な振る舞いをする機械学習モデルをプロダクトに組み込もうとしているソフトウェアエンジニアの方々に向けて、効率的な開発手法や課題解決のポイントを共有したいと思います。解決すべき課題の見極めの重要性LLMが脚光を浴びているように、機械学習で実現可能なことは飛躍的に増えています。その広範な可能性の中で「誰の」「どんな課題」を解決するのかを明確にすることが、プロジェクトの成功には不可欠です。LLMを用いてユーザーの問い合わせ対応を自動化する場合でも、対象となるユーザー層や具体的なニーズを深く理解しなければ、効果的な解決策を提供することはできません。技術そのものに目を奪われるのではなく、解決すべき課題を的確に見極め、その課題に最適な技術を選択する姿勢が求められます。適切な課題設定が行われれば、その後の技術選定や開発プロセスもスムーズに進みます。逆に、課題の見極めが不十分だと、リソースを無駄に消費し、期待する成果を得られないリスクが高まります。インターンシップ期間中に出たアイディアの一つとして、LLMによる合成データ生成の話がありました。確かにLLMによる合成データは研究も盛んであり、ピッタリ課題にはまれば大きな成果につながり得ます。その時は固有表現抽出タスクを扱っており、実際に課題の第一仮説だったのはデータセット内の固有表現のバリエーション不足でした。これを解消するのに最も確実で安く早い方法は、外部データベースにある固有表現リストと単純なスクリプトによってデータの一部を差し替えた合成データを用意することでした。いうガイド冒頭にはこのように書かれています。偉大な機械学習の専門家としてではなく、偉大なエンジニアとして機械学習を取り扱うべきであり、その第一歩目には機械学習抜きでプロダクトを作ることを恐れるなとまで言っています。LLMが誰でも自由に使えるようになった今、この判断の閾値はグッと下がったとは思います。ハードコーディングされたごくごく簡単なパターンマッチングで実現したいことのほとんどがカバーでき、それから外れてしまう例外に関してもさほど課題にならないのであれば、LLMを使うことは開発者の独りよがりとすら言えてしまいます。この考えをまずは出発点としながら、本当に解決すべき課題は誰のどんな課題なのか、それに見合った妥当なアプローチは何なのかを見極めるところを踏み外さないのが何より大事だと考えています。今回のサマーインターンシップでは3週間、弊機械学習グループで普段回しているスプリントサイクルだと2週間。定常的なリリースサイクルだと1週間。小規模なモデルの学習サイクルであれば1日。実際に開発に取り組む中ではリソースの制約やリズムが常に存在します。その中でうまく不確実性を下げ、提供価値を確かなものにするためには、重要な課題に対する仮説を構築し、その検証を通じて次の行動を明確にすることが重要です。良い仮説とは、結果がどうであれ次のステップを定める指針となるものです。「エラー分析をしたところ、学習データの中にノイズとなるようなデータが多く含まれていることが分かった。データの前処理を改善すればモデルの精度が向上しそうだ」という仮説を立てた場合、その検証結果に応じて、前処理の方法を確定するか、別の要因を検討するかが決まります。この場合、モデルの安定性は増しても精度が上がるところまではいかないかもしれません。あれば、次に心当たりがある部分への施策を打てば良いわけです。何の見当もない行き当たりばったりの進め方であれば、うまくいかなかった時に路頭に迷ってしまいかねません。インターンシップ開催期間中には、毎日の終わりごろに夕会と称して今日の成果と明日取り組むことを話す場を設けていました。弊グループでは初のインターンシップだったこともあり、最初はこの場の型めいたものが特になかったのですが、ぼんやり議論が発散してしまったり、インターン生にも、次に取り組むことについて思いつく手立てを挙げてもらったがはてどうしよう......という感じで引き締まった議論になりにくかったという課題がありました。仮説に対するアクション」を夕会前に考えてもらった上で話し始めるようにするといった工夫を行うようにし、モデルの性能が高くないのは何故だろう、そのために突き止めるべきはなんだろうということにお互い思索をめぐらせられることで、できるだけ引き締まった議論が進むようにしていました。これは機械学習モデルに向き合うときだけの話ではなく、エンジニアリング一般にも通用する話です。ソフトウェア開発においてバグに向き合うときのトラブルシューティング時は、発生箇所の特定、発生原因の切り分けを素早く進めていくのが大事だと身をもって知っている人は多いかと思いますが、それと同じ話です。このような仮説検証のサイクルを繰り返すことで、不確実性を段階的に減らし、効率的な意思決定が可能となります。重要なのは、仮説が正しいか間違っているかではなく、その検証を通じてプロジェクトを前進させることです。フィードバックサイクルを短縮するための工夫モデルの性能に関するピンポイントな仮説を立てることは難しい場合も多いので、「打席に立つ回数をできる限りあげればその分あたりをつかむ可能性が上げられるはず」という環境づくりも非常に効果的になってきます。実際のところ、弊グループで現在進行中のプロジェクトでは、モデリング施策を素早く投入できるようにすることを第一に据えています。ソフトウェア開発において、ひとつの関数に対する単体テストであれば、実装した内容の検証サイクルは数秒で済みます。統合的なテストであれば数分、人の目や一連の操作やデータ投入を伴ったQAとなると日単位にまで達するかもしれません。大量のデータを伴った機械学習モデルの学習となると、それだけで数時間から数日(LLMであればそれこそ数ヶ月)の計算時間を要します。何の工夫もなければ、些細なミス一つで大量の時間を犠牲にしてしまうリスクを背負ったままです。今回のインターンシップ期間は機械学習モデルを中心に据えた上で3週間という期間だったので、素早く検証が進められることがことさら大事でした。データ変換時のバグを修正するのに毎回全体の処理を回していては無の待ち時間が何回も発生してしまっているという状況を隣の席からキャッチし、まずはデータを削って処理する、デバッガで処理状況を確認する、欠損値やnullの存在を確認してからデバッグにあたるなど、細かいけれどもチリつもで大事になってくる工夫をおすすめしていました。大量の計算時間がかかる学習は、業務時間終了時に投入できていると最大限時間を使いきれるので良いといったことも、改めて口にする機会となっていたように思います。いった課題を解決するためのさまざまな工夫については、すでによくまとまっている資料があるので、それを紹介します。取り上げられている具体的技術内容はやや古いかもですが、このスライドに書いてあることのエッセンスは今もこの先も変わらないでしょう。機械学習モデルはプロダクトの機能を果たすための一部品として収まり、実際のプロダクト上のユーザの振る舞いによって初めて期待通りのものが開発できたかがわかる......といった状況にもなりやすいです。リリース後もデータの分布が時間と共に変化し(データドリフト)、リリース当初の性能が発揮できない状況も自ずと発生しがちです。モデルの性能を安定的に評価し、劣化を早期に検知するためには、適切なメトリクス設計が欠かせません。モデルの予測結果やユーザーの反応をリアルタイムで収集・分析し、問題の早期発見と対応を可能にするこれらの取り組みにより、モデルの性能劣化によるリスクを最小限に抑えることができます。今回の3週間というインターンシップ期間ではこの手の性質の話にまで踏み込むことはなかったのですが、今後弊グループで中長期インターンシップを行う際にはこのことも意識をしたいなと考えています。おわりに機械学習エンジニアリングにおける課題解決のポイントと、効率的な開発手法について解説しました。手練の機械学習エンジニアにとっては基礎的な話ですが、全て息を吸うように完璧にできているかという自己点検として有意義ですし、こういった性質の問題領域に新たに飛び込んでくる人たちにエッセンスをうまく受け渡して行きたいので書き起こしてみました。下げるための工夫が、これまで以上に重要になっています。非決定的なモデルを扱う際には、データの変化やモデルの不確実性を念頭に置き、定量的なメトリクスによる評価とリスク管理を徹底することが求められます。フィードバックサイクルを短縮し、迅速な意思決定と改善を行うための工夫も欠かせません。大学での科学技術論文の執筆プロセスは、これまで述べてきた思考法やスキルを身につける絶好の機会です。研究テーマの選定は、その後の研究成果を大きく左右する。研究計画の策定やリスクの予見と対策は、プロジェクトマネジメントにおいて重要な能力である大学での研究や論文執筆を通じて得られるスキルや思考法は、実務においても大いに活かせます。現役の機械学習エンジニアやソフトウェアエンジニアの皆さん、そしてこれから社会に出る学生の皆さんが、これらのポイントを活かしてさらなる飛躍を遂げられることを願っています。機械学習エンジニアの吉田です。機械学習グループに入るべき理由(2024年版)すべての経済活動を、デジタル化したい松村(@yu-ya4)です。Laye...2024-05-31【JSAI2024参加レポート】LayerXにおけるAI・機械学習技術の活用と展望の発表内容やセッシ...機械学習エンジニアの上川(@yuta_kamikawa)です。読者になるこのブログについてはてなブログをはじめよう!layerxさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。