AIソフトウェアの特徴

はじめに

 AIソフトウェアは、従来型ソフトウェアと違った技術的特徴があるために、開発の手法や法的問題点にも特徴があります。AIソフトウェア開発の契約書を作成する場合には、AIソフトウェアの特徴を十分に把握した上で作成する必要があります。そこで、AIソフトウェア開発契約を作成する前提知識として、AIソフトウェアの技術的特徴について解説します。

AIソフトウェアの生成方法

 AIソフトウェアの開発では、まず、(1)学習済みモデルの生成段階である「学習段階」があり、次に、(2)生成された学習済みモデルの利用段階する利用段階があることが通常です。

【図表1】学習段階・利用段階の流れ

AI・データの利用に関する契約ガイドライン:AI編

出典:AI・データの利用に関する契約ガイドライン

学習用データセットの生成段階

 生データは、通常、そのままでは機械学習することはできず、機械学習をするのに適した形に加工することになります。具体的には、欠測値や外れ値の除去等の前処理や、正解データのラベル情報といった別個のデータの付加するなどして、変換・加工処理をすることによって、学習を行うのに適した「学習用データセット」を生成することになります。

 生データに対して、生データとは別個のデータを付加する「アノテーション」がおこなわれることもあります。アノテーションの典型例は、生データに正解データを付加するというものです。付加データは、生成される学習済みモデルの内容・品質に大きな影響を及ぼしますが、生データと結合してこそ価値があるデータであり、単独では価値がないという特徴があります。

 また、データ量を増やすために、生データに一定の変換を加え、「水増し」するデータオーギュメンテーション(データ拡張)という手法もあります。

 「学習用データセット」とは、一次データである生データに変換・加工処理をした二次的データといえます。

学習済みモデルの生成段階

 あるモデルについて、採用する学習手法による学習を実現するために、コンピュータに実行させる手順を規定するプログラムを「学習用プログラム」は呼ばれることが多いです。

 学習用プログラムの開発では、スクラッチから開発する手法もありますが、自己の既存のプログラムを利用するほか、OSS(オープン・ソース・ソフトウェア)と呼ばれるソースコードが一般に公開され、無償での利用が許諾されたソフトウェアを利用することが広く行われています。

 そして、学習用プログラムに、学習用データセットを入力して、「学習済みモデル」を生成します。学習済みパラメータは、学習用データセットを用いた学習の結果、得られたパラメータ(係数)となります。

 学習済みパラメータは、単体では単なるパラメータ(数値等の情報)にすぎませんので、これを「推論プログラム」に組み込んで、学習済みモデルとして機能させます。ディープラーニングの場合には、学習済みパラメータの中で主要なものとしては、各ノード間のリンクの重み付けパラメータが学習済みパラメータに当たります。

 「推論プログラム」とは、モデルのアルゴリズムを記述し、組み込まれた学習済みパラメータを適用することで、入力に対して一定の結果を出力することを可能にするプログラムです。

 なお、「学習済みモデル」という言葉が出てきましたが、この用語の定義は未だ確立されておらず、利用する人によって、意味が違うことがあるため注意が必要です。「学習済みモデル」の定義について、最も一般的であると考えられる「学習済みパラメータが組み込まれた推論プログラム」(推論プログラム+学習済みパラメータ)を「学習済みモデル」と呼ぶことにします。

学習済みモデルの利用段階

 利用段階では、学習済みモデルに、未知の「入力データ」を入力し、その出力として一定の結果を得ます。この結果は、過去のデータに基づいて、新しいデータを推論したものです。

AIソフトウェアの技術的特徴

 本書では、AI技術として、ディープラーニングを含む機械学習を利用したソフトウェアをAIソフトウェアと呼ぶことにします。AIソフトウェアは、従来型のソフトウェアと違った技術的特徴があります。

帰納的な開発

 従来型のソフトウェアは、基本的に、プログラムを条件と命令で記述するものであり、ロジックを積み上げていく形で作成していきます。このような手法を「演繹的」ともいいます。

 これに対して、機械学習では、データを利用して、ソフトウェアを「学習」させる点が異なります。

 機械学習のソフトウェアでは、データを利用することから、出来上がったものはデータに依存することになり、従来型のようにロジックを積み上げてできあがるものではなくなります。つまり、データという「結果」からソフトウェアを作成していくことになり、「帰納的」手法ともいわれます。

 ですから、AIソフトウェアにとっては、多くの場合、データが非常に重要となります。ゴミのようなデータでAIソフトウェアを作成しても、ゴミのようなAIソフトウェアしかできません。そのため、データの収集や前処理に、かなりの時間と労力が必要となり、AI開発のソフトウェアの時間・労力の7~8割がデータの取扱いに割かれるという話もあります(もちろんケースバイケースですが)。

開発対象の確定、性能・品質を保証することが困難

 従来型のソフトウェア開発の場合、開発初期の企画・要件定義段階が設けられており、どのようなソフトウェアが開発されるかについて、ある程度は明確になってから開発に進むのが通常です。また、開発されたソフトウェアは、その計算・処理過程がロジカルであり、その挙動を予測することも比較的容易であるといえます。そのため、ベンダが、事前に一定の性能保証をすることも考えられます。

 これに対して、学習済みモデルを生成する場合には、その開発は、通常、ユーザが用意したデータから学習用データセットを作成するため、ユーザが求める挙動や精度を満たす学習済みモデルを完成できるかについて、ベンダが事前に予測することが困難です。

 また、学習済みモデルは、過去の利用可能なデータに使って学習するに過ぎないため、未知の入力(データ)に対して、どのような挙動をするのかを確実に予測することはできず、その性能を保証することは困難です。

事後的な検証(欠陥の原因追及・修正)が困難

 従来型のソフトウェア開発の場合、契約に定めた性能のソフトウェアが得られなかった場合には、ソフトウェアの処理プロセスを再度検証・修正することによって、原因が特定できることも少なくありません。これに対して、AIソフトウェアでは、期待された精度を達成しない場合に、その問題点が、データなのか、アルゴリズムの選択なのか、学習のためのパラメータ(ハイパーパラメータ)なのか、プログラムのバグなのか、原因を特定するのに困難です。つまり、学習済みモデルの生成には、従来型のソフトウェア開発の場合と異なって、事後的な検証をすることや、欠陥や瑕疵を修正することが困難という特徴があります。

学習済みモデルの内容・性能がデータに依存すること

 学習済みモデルの生成は、学習用データセットを利用して行われますので、学習済みモデルの性能は、学習用データセットと、その材料である生データの品質に大きく依存します。

 例えば、学習用データセットに含まれるデータに本来の統計的性質を反映していないデータ(外れ値)が多数混入していた場合や、学習用データセットのデータに大きな統計的なバイアスが含まれていた場合等は、精度の高い学習済みモデルを生成することは困難です。

 また、学習時と推論時のデータの確率分布が大きく異なるような場合には機能しない場合があります。

ノウハウの重要性

 データを扱うことや、学習させるというステップが不可欠になることから、プログラムの作成以外に、データの取扱いや学習方法についてのノウハウが、良いソフトウェアを作成するのに重要となります。

 また、学習済みモデルの生成・利用過程では、ユーザおよびベンダの有する様々なノウハウが利用され、学習済みモデルの性能に大きく影響することになります。

 従来型のソフトウェア開発においても、ノウハウは重要性でしたが、学習済みモデルの生成においては、学習用データセットの収集・加工方法や学習用プログラムを実行する際のハイパーパラメータの設定など、従来型のソフトウェアで想定されていなかった新たな種類のノウハウも重要となります。

 したがって、開発者としてはノウハウをどのようにして保護するかということも考える必要があります。もっとも、ノウハウを保護するといっても、ノウハウにはピンからキリまでありますし、技術の発展のスピードも早く、オープン化の流れもありますので、すべてのノウハウを守らなければならないというわけではありません。

再利用の需要の存在

 AIソフトウェア開発においては、学習用データセットや学習済みモデルについて、汎用性を有するものが多く、他の研究開発あるいは商業目的での再利用をすることが考えられます。 

 学習済みモデルの具体的な再利用の方法としては次の方法が考えられます。

  • 新たなデータを使った追加学習、転移学習をして、新たな学習済みモデルを生成する(派生モデル)。
  • 学習済みモデルの入力データと出力データを利用して、新たな学習済みモデルを生成する(蒸留モデル)。
  • 複数の学習済みモデルの出力結果を組み合わせることで学習済みモデルの精度を向上させる(アンサンブル学習)。

 再利用した学習済みモデルについては、その取扱いをどのようにするかを取り決める必要が生じます。
 再利用することで、新たな技術開発や事業展開したい当事者と、再利用を制限したいという当事者の間で、利害調整の必要が生じることがあります。

出典:経済産業省「AI・データの利用に関する契約ガイドラインの概要」(2019年7月)

AIソフトウェアの開発方式の特徴

 このようなAIソフトウェアの技術的特徴は、開発方式にも影響を与えることになります。
 従来型のソフトウェア開発の手法としては、システム開発では、「ウォータフォール型」という手法が良く用いられています。この手法は、ソフトウェア開発の過程を「要件定義」、「システム設計」、「システム方式設計」、「ソフトウェア設計・プログラミング・ソフトテスト」、「システム統合」、「システムテスト」、「運用テスト」、「運用・評価」等の工程に分割し、前工程を完了させてから後工程に取り掛かるというものです。この手法は、後工程から前工程に後戻りしないことを基本コンセプトとしています。

 ウォータフォール型の開発方式は、計画性を重視する開発方式であり、段階的に開発ステップを踏んでいくために工程の管理が比較的容易であり、高度の信頼性を要求されるシステムの開発に適しているといわれています。

【図表2】ウォータフォール型のシステム開発の流れ

出典:経済産業省「情報システムの信頼性向上のための取引慣行・契約に関する研究会」報告書(平成19年4月)

 これに対して、AIソフトウェアの開発については、典型的なものは、(1)モデルを記述した学習用プログラムを準備し、(2)それに学習用データセットを投入して学習させ、(3)出来上がったものの挙動や精度を見て、モデル・データ・学習方法などを手直しを行い、(4)再度、学習させ、(5)最終的に満足のいく挙動や精度が出る学習済みモデルを生成していくというものです。

 このように、AIソフトウェアの開発は探索的に試行錯誤をしながら開発をしていくことが多く、後戻りを許さないウォーターフォール型の開発方式は、一般的には向いていないといえます。そのため、AI・データ契約ガイドラインでは、AIソフトウェアの開発方式として、「探索的段階型」の開発方式が提唱されています。

AI・データの利用に関する契約ガイドライン)概要資料

出典:経済産業省「AI・データの利用に関する契約ガイドライン 概要資料

タイトルとURLをコピーしました