タスクごとにプログラミング

 この理由は、コンピューターに何かをさせるためには、そのためのプログラミングが必要になることです。

 最新のロボット工学では、確かに様々なことができるようになりました。たとえばホンダが開発したASIMOはお盆にお茶の入ったコップを運び、人に渡すことができます。このために多くの技術者が長い期間をかけてプログラミングをしました。ところが、コップを回収して流しに入れるといった別の動作をさせるためには、また一からプログラミングしなければなりません。

 AlphaGoも、囲碁では無類の強さを誇る一方で、チェスや将棋はまったくできませんし、他のいかなる問題もできません(もちろんAlphaGoで培われた技術は他の分野にも応用が可能でしょうが、それは人間が行う作業です)。人間なら、あるタスクから得た知見をほかのタスクに応用するような一般化ができますが、そのような能力は既存のAIにはありません。

 もうひとつ例を挙げましょう。米DARPA(国防高等研究計画局)は、ロボットに災害救助(を想定した競技)をさせるコンテスト「DARPA Robotics Challenge(DRC)」を開催しました。参加したロボットは、自動車を所定の場所まで運転し、降車し、ドアノブをつかんでドアを開けたり、ドリルを持って穴を開けたり、瓦礫の上を歩いたりしなければなりません。これらを実行するためには、極めて優れたエンジニアが長い期間をかけてプログラミングをする必要があります。たとえば「ドアノブを開ける」というタスクでは、次のような手順のプログラムが必要です。

  • 3Dスキャナー(レーダー)でドアノブがありそうな場所の三次元形状を推定する
  • 推定した形状をもとに、最もドアノブに似ている形状のものを探す
  • ドアノブの向きを調べて、つかむために必要な手首の角度を計算する
  • 自身の位置とレーダーの情報を元に、肩からドアノブまでの位置関係を計算する
  • 以上の結果から、肩・肘・手首・指をどのように動かせばドアノブまで手を伸ばせるかを計算する
  • モーターを駆動させる
  • 様々なノイズによって各関節の位置に誤差が出るので、それらを検知する
  • 誤差を打ち消すために必要な動きを計算して、フィードバック制御する
  • 手に何かがぶつかったらそこで動きを止める
  • レーダー情報を解析して、手にぶつかっているものが確かにドアノブだと判定したら、手を握る
  • etc.

 ここまででようやく「ドアノブを握る」まで到達しました。これ以上書きませんが、これだけの処理を人が作りこんでいく(=プログラミングをする)必要があります。DRCではドアノブがレバーのようなタイプでしたが、丸いタイプだったらまた修正が必要です。ボタンを押して開く自動ドアだったら、また修正が必要です。気が滅入りますね。