![見出し画像](https://assets.st-note.com/production/uploads/images/153931873/rectangle_large_type_2_ce6f5af3c49a71f8e0111bcf5e695f09.png?width=1200)
(後編): 機械学習モデル活用プロジェクトをやってきた人の立場から見る、数理最適化・スケジューリング問題の面白さ
こんにちは、matsunoです。
今回は「スカイディスクというSaaSカンパニーで、AIエンジニアとして働くことの面白さ」の後編という位置付けの記事になります。(前編はこちら)
「機械学習モデル活用プロジェクトをやってきた人の立場から見る、数理最適化・スケジューリング問題の面白さ」について語っていきたいと思います。
よろしくおねがいします。
技術的観点からの位置付け:
スカイディスクでは
「AIをだれもが活用できる世界をつくる」
というVISIONを掲げています。
ここでいうAIには、どんなものがあるのでしょう? (※)
みなさんは、AIにどんなイメージがありますか?
聞くとなんでも答えてくれて、プログラミングも代わりにやってくれたりする、大規模言語モデル [Large Language Model: LLM] が便利ですね。
囲碁や将棋のようなボードゲーム、あるいはビデオゲームをプレイするAIについて想像される方もいらっしゃるでしょう。
カメラを通じた顔認識であったり、少ない手がかりから上手に絵や3Dモデルを描いてくれる、畳み込みニューラルネットワーク [Convolutional Neural Network: CNN] ベースのモデルを活用したサービスもかなり市民権を得てきました。
レベル4やレベル5に分類される、高度な自動運転システムの実現も楽しみですね。
技術的な分類から言うと、上記の例はどれも「深層学習モデル」を活用したAIになります。
しかしながら、AIのカバーする領域はこれらだけにとどまりません。
詳しいことは人工知能学会が提供しているAIマップに譲ることにして、この記事では
特定業務の自動化を目指すソリューションプロジェクトにおいて頻繁に用いられる、統計的データ分析や機械学習のテクニック
数理最適化やスケジューリング問題への対処に必要な考え方やアルゴリズム
の共通点や差異、面白さについて語っていきたいと思います。
※: 実際には、AI(人工知能) は学際領域に属する研究テーマであり、学術的な観点のみから言っても、計算機科学(コンピュータサイエンス), 数学, 統計学とデータサイエンス, 神経科学, 心理学, 哲学, 倫理学, 言語学, ロボティクス, 機械工学, 電気工学, 経済学, 社会科学, 法律学などさまざまな分野が複合的に共存している状態にあります。
AIという確立したひとつの研究分野がある、というよりも、それぞれの分野が同じAIという旗印を掲げ、協力し合いながら進化させていっている最中である、という捉え方をした方がより実態に即していると思われます。
さらに「AIの研究によってもたらされ、発展してきた技術を活用して、実存の社会課題や経営課題を解決する」という、学術的興味に留まらない営みに関しても、一般的に”AIプロジェクト”などの呼称が使われることがあるので、注意が必要です。
業務自動化課題に対する処方箋:
業務自動化プロジェクトに対する必殺技として、業務をモデルへ落とし込む、という処方箋があります。
ここではひとまず「再現性が高くなるように定型化された」「人間による行為の代替となり、複製可能である」「構造化・単純化によって挙動の説明性が高い」ナニカ、のことをモデルと呼ぶことにしましょう。
特定業務の自動化を目指すソリューションプロジェクトの場合、プロジェクトのゴールは「特定業務をモデル化し、人間の代わりとして運用できるようにする」ことになります。
入力データに基づいて”分類”や”予測”を行う業務が自動化の対象になりますよ、という話を聞いたことがある方も多いのではないでしょうか。
機械(コンピューター)を、統計的に扱える入力データ&出力データの組(教師データ)に基づいて学習させて、類似のパターンを持つ入力データに関しては類似の出力を返す能力を持った、確率的推論モデルを作り上げます。
幸いなことに、大機械学習時代である現代においては、
プロジェクト設計 → データ収集 → データ分析 → モデル化 → システム化 → システム運用
という進行段階のうち、モデル化については「既存の選択肢から選び、流用する」という手段を取れることが多いです。(特に深層学習のモデルは、再利用・調整が行いやすいように整備されています)
ここで例えば、特定業務が「目視によって、出荷前の製品が正常品であるか不良品であるかを仕分ける検品業務」であったり「過去数ヶ月の売上高から、来月の売上高を予測して今月分の生産量を判断する見積業務」である場合に、「なるほど、カメラで撮った正常品と不良品の画像を集めて、CNNベースの検知モデルを転移学習させればいいんだな」とか「月ごとに集約された売上高の時系列データを学習させて、予測させたり定期的にモデルを更新したりが簡単にできそうな機械学習のフレームワークにはなにがあったっけ?」というような考え方が概ね通用する、ということです。
勉強目的の場合を除いて、逆誤差伝播アルゴリズムを自分で実装する必要性に迫られたりすることはないでしょう。
モデル化する方法に目処がついていれば、データサイエンティスト・機械学習エンジニアは「このモデルにうまく流し込めるデータを準備するにはどうしたらよいだろうか?(形式・品質・数量)」とか「モデル候補がいくつかあるけれども、どれにするかの判断材料が欲しいな。今あるデータがどんな特徴を持っているのか可視化してみよう(探索的データ分析[Exploratory Data Analysis: EDA])」といった作業に集中することができます。
プロジェクトの構想や設計段階において「現行業務では担当者がこのような情報を使って判断している(ということが業務マニュアル化され、判断基準が定量的に明確化されている)」「他社の事例では〇〇の指標がxxx以上のデータ標本を使ったらしい。うちのデータ整備状況は?」のような確認が十分に済んでいれば、分析・開発担当者は水を得た魚のようにイキイキと働いてくれることでしょう。
数理最適化問題への対処法:
一方の数理最適化問題に対しては、メタヒューリスティックアルゴリズムの代表格、遺伝的アルゴリズムなど、一部定番アルゴリズムの存在を除き、確立された手法やフレームワークは限定的です。
巡回サラリーマン問題に落とし込めるのであればこの解法、ナップザック問題に落とし込めるのであればこの解法、といった処方箋は一定存在するものの、まさにその「落とし込めれば」の部分が鬼門となり、現実的な問題をバッサバッサと薙ぎ倒していける、というような状況からは程遠いです。
このことはすなわち「数理最適化の対象にしたい特定の問題に対する深いドメイン知識や、データ構造に合った効率の良いアルゴリズム(時にデータ構造の捉え方そのものの刷新も)を駆使して、ただ”当て嵌めるだけ”でない現実の問題に挑戦できる」余地が大きい、ということを意味します。
現在の我々が主戦場にしているスケジューリング問題に目を向けると、ナーススケジュール問題というひとつの(アカデミックな)定番はありつつ、時間枠の大きさが変動したり、納期だけでなく段取り替えの評価軸があったり、在庫の考慮が要求され、活用する資源の選び方にまた別の数理最適化問題が潜んでいたりなど、非常に複雑で奥深くて多彩な様相を示しています。
我々は、多彩な現実のスケジューリング問題を理解するためのアプローチ・枠組みとして、数理最適化というよりはむしろ制約充足問題 [Constraint Satisfaction Problem: CSP]という捉え方を重要視しています。(有名なCSPの問題例としては「数独パズル」などがあります)
数理最適化とCSP:
(狭義の) 数理最適化は「事前に評価指標が決まっていて、与えられた探索空間の中でベスト(最適)な一つの解を探す」営みであるのに対して、CSPでは「与えられた探索空間の中で、制約条件に違反しない解を見つける」というゴールを採用します。
言い換えると、数理最適化の主眼は「いかに評価指標のよい解を選び出すか?」であるのに対して、CSPの主眼は「いかに制約条件を満たす解を素早く見つけるか?」である、ということです。
制約条件はひとつであるとは限らず、必ず満たす必要のあるハードな条件、できれば満たしたいソフトな条件、変数単体に課せられる条件、変数間に存在する複合条件と様々です。
CSP攻略のテクニックとしては Arc Consistency などが知られており、制約条件を利用して探索空間を上手に切り捨てることで、計算時間を数桁単位で大きく削減することができます。
実務エピソードのコーナー:
現在、スカイディスクのAIエンジニアチーム(エンジンチーム、と呼ばれています)では、知識強化会と題して、週に一回の頻度で集まってアルゴリズムの競技会を行っています。
グラフ構造データの取り扱いであったり、割り当て、数理最適化や動的計画法をテーマにした模擬試験が与えられ、よーいドン!の合図に合わせて一斉に、解法となるアルゴリズムを考え・プログラムに落とし込み、テストケースによる検証を行い、実装の素早さや計算処理時間・アルゴリズムのエレガントさなどを競う会です。
勝者にはその日のフリーランチが授与されることもあります。(この部分は確率的に発生するイベントです)
ただ競うだけでなく、詰まっているところやエッジケースについて相談したり、勉強中のプログラミング言語で挑戦してみたり、Copilot が賢すぎて絶望したり、和気藹々と運営されています。(ちなみに、スカイディスクではエンジニアメンバー全員に Github Copilot X の利用権が与えられていますし、社員なら誰でも ChatGPT Plus などの LLM 利用料金を会社が負担してくれています)
![](https://assets.st-note.com/img/1729069928-E5WsSDCKLw9XIUQcbJHofhF2.png)
少し前に、エンジンチームでは、スカイディスクが提供する生産計画DXサービス、最適ワークスの自動立案エンジンにおける動作速度改善プロジェクトを行いました。
知識強化会によって得られた知見が、動作速度改善プロジェクト内で直接的にものすごく役に立った、強い因果関係がある、とまでは言えないのがもどかしいのですが、動作速度改善プロジェクトでは、異なるプログラミング言語の採用まで駆使することで、計算時間を50倍以上、メモリ使用量を10倍以上にまで圧縮することに成功し、大幅な性能アップを達成しました。
この自動立案エンジンを用いることで、1ヶ月分のオーダーに対する自動立案が1秒以内に終わるような速度感を実現する可能性が見えてきています(※)
残念ながら、このエンジンはまだ最適ワークスには搭載されていないのですが、種々の検証を行ったのち、近々に利用を開始する予定です。
計算時間のみに留まらず、エンジンもプロダクトもどんどん進化していっているので、これからの発展もお楽しみに!
※: 応答時間は、オーダー数や製品が持つ工程の数、制約条件の複雑さや設定の有無、回線速度の影響などによって変化します。記述は応答時間を保証するものではなく、あくまで目安となる一例であることをご了承ください。
結論:
統計的データ分析や深層学習によるモデル化の面白さ
データの可視化や統計分析・EDAによりデータの性質や傾向が見えてきた時の、発見的な喜びが大きい。
前処理を工夫し、Model / FrameWorkを使いこなして、garbage in garbage out に抵抗できたら嬉しい。
数理最適化・スケジューリング問題の面白さ
言語化されてこなかった経験則を見つけ、それをうまく実装に落とし込む楽しさがある。
データ構造・アルゴリズム・評価指標、三種の神器を以って、今まさに困っている現実の人を助けることに直接貢献する喜び。
共通して、仕事としてのAIエンジニアリングの面白さ
理解し、説明する、理論の面白さ
学際領域でどう「納得」を作るか
関連キーワード: XAI
設計し、運用する、実践できる面白さ
ものづくりや仕組みづくりの喜び
関連キーワード: DevOps
結びに替えて:
本稿では、二回にわたって「スカイディスクというSaaSカンパニーで、AIエンジニアとして働くことの面白さ」について語ってきました。
意見・主張となる「どんな面白さがあるか」を結論として据え、その結論を導き出すための要素・事実・概念について丁寧に説明してきたつもりです。
読者の方にとって、なんらか理解が深まったり、共感できる部分があると嬉しいです。
スカイディスクでは、一緒に働いてくれる仲間を募集中です。
カジュアル面談を通じて気軽に繋がりましょう!
特に「製造業DXにシンギュラリティをもたらす気概・技術・能力を持ったエンジニアの方」が、この記事をきっかけに声をかけていただるのであれば本望です。ご検討よろしくお願いします!
https://recruit.skydisc.jp/