2024年12月5日木曜日

研究指導での悩み

 学生が学会賞をとれない

今回の学会シーズンでも学生は学会賞を逃しました。毎回、今年こそは!と思っているものの、どうしてもダメみたいです。発表内容はバツグンだとおもうのですけど何がダメなのか......。学生がダメな面もあるのですが、僕にも原因があると思っています。その原因が、僕が反省して改善できるのなら良いのですが、どうもそうではないような気がしているのです。


オリジナリティー問題

研究には「オリジナリティー」が要求されます。「オリジナリティー」とは唯一無二の発想や手法で、皆があっと驚くような結果を得ることです。僕は、「ほかの人が悔しがるような研究」と大雑把に考えています。思いつきさえすれば自分もできたのに!と感じてしまう研究は「オリジナリティー」が高いと言えるからです。

昔から僕の研究は、僕の個性が強く反映されたものでした。僕は、計算機、数学に強く、割と基本的な物理しか使わない一方で、それらを縦横無尽に駆使します。極めて多くの分野にわたって専門家として通用する程度の知識と理解を僕は持っています。僕の特別な分野はX線CTで、これはだれにも負けないレベルにありますが、それ以外の多くの分野で「学生向けの教科書を書けるレベル」にあります。

僕が研究に参加するだけで、僕の「カラー」が入り込み、僕が携わったことがすぐにわかるようになります。また、どの部分に僕の貢献があるかも割とすぐわかるのです。これは僕の稀有な才能ともいえるもので、研究者としては極めて有利な性質です。

この性質には不利な面もあります。一つは、オリジナリティーが高すぎて理解者がほとんどいないことです。研究者の世界は相互評価が基本です。評価を上げるには「同業者」の賛同と称賛が必要なのです。オリジナリティーが高すぎると「同業者」がほぼいません。さらに、僕の分野に後から参入しようとすると、瞬間的には僕を凌駕する必要がありますが、分野をまたいだ知識をふんだんに織り交ぜた僕の研究を瞬間的にも凌駕するのはとてもハードルが高いのです。だから、僕が頑張れば頑張るほど「同業者」がいなくなり、僕の評価が上がらないという何とも奇妙な状況が生まれます。ま、でもこれは僕個人の問題にとどまるので、僕があきらめればよい話です。評価されるために研究しているわけでもないしね。


学生の研究には指導教官の「カラー」が反映される

このオリジナリティーの問題が学生にも波及してしまう点が今回の悩みの本質だと思っています。職業柄、学生を指導するわけで、学生の研究テーマは基本的に僕が提供します。学生の研究ですから、学生の能力でなんとか実施できるような設定で研究計画を策定します。ただ、学生の研究がうまく進まないときは僕が手助けすることになるので、当然、僕の手助けがあれば問題なく遂行できるレベルの研究テーマを設定することになります。

このプロセスにはまったく不自然ではないのですが、僕が全面的に関与する場合には問題になります。当然、僕は僕の能力を前提に研究計画を立てます。僕の知識、スキルの範囲で、仮説を立て、仮説を検証する手段を組み立てます。学生の研究というのはそういうもので、みんなそのようにしているものです。その時、どうしても僕の「特殊な」オリジナリティーが入り込みます。というか、僕はそういう研究しかできませんからね。

そうするとどうなるかというと、学生の研究であっても、他の研究者にはまねができないレベルの研究になります。そもそも研究というのはほかの研究者がやっていないことを率先しておこなうことなので別に不自然ではないのですが、「学生の研究」の場合はそういうものばっかりではありません。というか「学生の研究」では研究室の特殊な道具立てとかあるものの、一般的な手法を組み合わせて指導教官の得意分野内の小規模なテーマが設定されます。指導教官の得意分野や他の研究を知っていれば、比較的容易に内容を推測でき、いざとなったなら自分でもできそうだな、とだれでも感じるものです。もちろん、僕も同じように「学生の研究」を設定しているつもりなんですが、どうしても僕の個性が少なからず入ります。

研究における僕の個性はかなり強烈なので、僕の関与がないと完遂できないような研究になってしまいます。他の人から見ると、僕の関与が80%とかに見えてしまうわけです。実際には細心の注意を払って計画しているので、研究テーマは100%僕(大学の研究室の研究とはそういうもの)ですが、研究の実施は80%以上学生です。というか、僕はなるべく関与しないように気を付けているのです。

そういう配慮はなかなか伝わりません。他の研究室の研究発表を見る時、その研究のどのくらいまでが自分でも可能か、という視点で考えるものです。有名な先生の研究はなかなかまねできませんが、そのお弟子さんだと、道具立てがあればなんとかできるかな、学生の研究なら装置や試料の問題以外は自分でもできるかな、なんて思って、現在の自分のレベルを確認するものです。そういう視点でみると、僕の学生たちの研究は、僕の特殊なスキルや知識が反映されているために、学生の研究であっても、マネするのが難しかったりします。そういうときは、指導教官の僕の関与が強い研究だ、と判断されてしまうのです。ま、学生の元々の能力では到底到達できないレベルにあるで、僕の関与はあるわけですが、それが強いか弱いか、という問題なだけなんですが、ふつうにみると僕の関与が強く「見える」ことは僕自身もわかっています。

ソフトウェア関連の研究

僕の特殊スキルの一つにソフトウェアがあります。この領域の僕の能力は特上です。プロ級ではなくて、実際にプロフェッショナルだし、もっと言えばスーパーです。プログラミング能力は簡単に100倍とかの差が付きますが、僕と卒業間近の学生の能力差は100倍以上あります。

とはいうものの、プログラミングは僕の主要スキルの一つのなので、学生の研究テーマでも活用されます。僕は化学系の所属なので、学生はプログラミングを学ばずに研究室に配属されます。ソフトウェア系の研究テーマにつく学生は研究室に入ってからプログラミングを学ぶことになります。

プログラミングは語学と似た側面があり、「経験」が大事です。つまり、学習に時間がかかります。僕が望むレベルのプログラミングスキルを身に着けるにはそこそこ適性があったとしても10年くらいかかるとみています。なので、学生が研究室に在籍する間に「プログラミング免許皆伝」になることはまず不可能です。なので、僕は学生の研究テーマに応じて、学生が学ぶプログラミングスキルを小さく限定し、指導します。難しい文法は使わず、高度な概念も避け、必要なプログラミング要素を必要最小限にしてテーマ設定します。それにより、おおむね1年くらいで「テーマ限定」で必要なスキルが身に付きます。

そのように一点突破主義な指導をすることで、「テーマ限定」で専門的なソフトウェアを書けるようになるのですが、外部から見るとそんな短期間に高度なプログラミングスキルを身に着けるのは不可能なので、僕がプログラミングを肩代わりしているに違いない、とみんな思うわけです。

プログラミングに限らず、熟練や修行が必要なスキルを必要とする研究をメインに据えている先生方は、研究を学生にオフロードするのに苦心されています。ある先生は学生には(主に安全面を鑑みて)やらせられない、とおっしゃってましたね。僕は「免許皆伝」を目指すのではなく、「一点突破」に極振りすることで問題を解消しているわけですが、これにも問題はあります。学生が極めて狭い範囲のスキルしか身に着けられないので、将来役立つスキルとしては価値が下がってしまいます。ただ、問題を整理し、切り分けて、各個撃破するというのは科学の基本戦略であり、それを実践しているのであれば、より広い範囲の学びにつながると僕は思っています。

学生にプログラミングの指導をする

どのように「一点突破」するかの具体例を示しておきます。学生に「画像処理」の研究をさせるとします。画像処理はの基本的な流れ(要素)は次のようになります。

  1. 画像データ(ファイル)を読み込む
  2. 画像処理を施す
  3. 結果(画像データ)をファイルとして書き出す
ここで、画像データを読み書きする部分は「定型」なので、僕が与えてしまいます。ただそれはシステムに組み込まれているライブラリを活用するだけなので、僕が与えるとしても大したものではありません。僕がこういう仕事を始めた時代はそういうライブラリもほとんどなかったので、画像フォーマットを調べて読み書きする関数を自作してました。特殊なファイルフォーマットに対応するには自作スキルが必要になりますが、そういうファイルに対しては「変換ツール」を僕が用意してあげれば済むことです。そのような配慮により、学生は「画像処理」の本体だけに集中できます。

さらに、画像処理の本体は次のような「定型」処理に集約できます。

  1. 出力画像のすべての画素に関するループ
  2. ループ内において、入力画像を使って出力画像中の特定の画素の画素値を計算する
  3. 計算結果を出力画像の所定の画素に書き込む

ここで、画像処理の特徴は項目2にだけ影響します。つまり、1と3は「定型」なのです。画像処理に関する「研究」とは、「入力画像を使って出力画像中の特定の画素の画素値を計算する」という部分に集約されます。

画像というのは2次元あるいは3次元の数値の表です。プログラミングの世界ではそういうものは「配列」という概念に対応します。なので、「数字の表から特定の座標の値を計算する式」が項目2の実態になります。なので、学生には、そのような式を具体的に策定するように指導します。この段階ではプログラミングの要素はほとんどありません。そして、数式をプログラミングするという行為は基本中の基本です。だから難易度は高くありません。画像処理・解析の結果はなかなかに高度だったとしても、それは「数式」が優秀なわけで、プログラミングそのものは平易なレベルにとどまるのです。だから、学生は短期間でソフトウェアを用いた研究がプロレベルに達することができるのです。

つまり、高度な画像処理・解析を行う研究であっても、その中心は「数式」を作ることであり、それはプログラミングとはほとんど関係がないのです。研究のレベルは「数式」の複雑さに依存するので、学生のプログラミングスキルが低くても高度な画像処理・解析を行う研究は可能ということです。

僕が学生にしつこく指導するのは以下の3点です。

  1. 画像とは数値の表である
  2. 画像処理とは、数値の表から必要な「値」を計算する数式である
  3. だから、プログラミングスキルの低さを言い訳にはできない
このように問題を分割し、本質的な問題に限れば、高いレベルの研究が学生にも可能になります。

2階に行くには階段を使う

研究というのは高みを目指す競争みたいなものです。山登りに例えたりしますが、学生の研究テーマで考える時は、「2階に行く」みたいな感じです。到達目標が割と近くに見えていて、到達ルートも見えています。2階に行くには普通は階段を使います。でも研究の現場では「階段」が良く見えないのです。あるいは、階段のステップが1mとか2mとかの高さがあったりします。ちょっと登るのが難しいルートを「開拓」する点に「研究」のオリジナリティーがあるのです。

学生はステップが異様に高い階段を登ろうとしがみついたりジャンプしたりするのです。放っておくとそれを繰り返したのち、あきらめてしまいます。でも現実にそういう階段?があったらどうしますか?足場を作ったり、梯子をかけたりします。研究でも同じようなことをすればよいのです。階段のステップをよく観察して凹凸を発見し、手がかりや足がかりにしてよじ登るという方法はよくやる手法です。研究では、問題を観察・分析して仮説を立て、問題の原因を究明し、一つ一つの問題を潰してゆく、という作業に対応します。梯子を懸けるのは、異分野からの技術導入に対応します。研究室にない装置を借りに行くとか、他大学の先生に相談するとかです。

研究の難易度とは「階段」のステップの高さで決まると言って良いと思います。で、僕の研究は、登れる「ステップ」が人よりもかなり高いのです。通常の人は「登れる階段を見つける」ことで「その研究をやってみよう」と考えます。なので、道具立てがそろっていれば誰でもできる研究、が多くなるわけです。特に学生の研究は「学生が登れる階段」である必要があるのでさらに難易度が低く設定されます。でも僕は、そもそも「登れる階段」の基準が高い上に、「登れる階段」が登れるのは当たり前なんで、そんな研究はほかの人がやればよい、と考えています。なので、学生の研究であっても、「一見登れそうにない階段」を研究テーマに設定します。そうすると、「僕の補助がないと登れるはずないよね」とみんな思っちゃうわけです。

僕の基本戦略は「階段のステップ」を「分割」することです。ステップを分割して追加のステップを作ります。この方法は割と一般的です。ただ、どこにでも追加のステップを作れるわけではなく、むしろ作れる場所が非常に少ないので、適切な場所を見つけられるかが研究のオリジナリティーに直結します。追加ステップが作れるか作れないかで研究の成否が決まると言っても過言ではありません。

僕が研究において設定している階段のステップは通常より高いので、追加ステップ1つでは登ることができません。追加ステップを2つあるいは3つ作って登っていくことになります。で、追加ステップを2個つくる作業は、追加ステップを1個作る作業の2倍ではないという点が難しいところです。追加ステップを作る難易度は、作成するステップ数のおよそ2乗に比例します。というのは、一つのステップ内に追加ステップを作成できる場所は複数存在します。追加ステップを一つ作る場合はどれか一つを選ぶだけですが、2つ以上だと組み合わせを考える必要があります。階段だと適当に選ぶだけで済みますが、研究においては適切な組み合わせを選ばないと意味がないのです。どのような選択をするかが試行錯誤で、これに時間と労力が必要なので、オリジナリティーの高い研究は困難なのです。


プログラマは組み合わせ問題を解くのが得意

プログラマでない人にはなかなかわからないと思いますが、プログラミングとは組み合わせ問題と解くようなものです。プログラムとは目的の動作を計算機が実施できる作業単位に分割し、その順序を記述したものです。計算機が実施できる作業単位というのは種類が多くないので、最初は目的の動作を「いかに分割するか」が大事になります。しかし、目的の動作が複雑になると分割後の要素が膨大な数になり手に負えません。なので、「よくある動作」をひとまとめにして、それを「計算機が実施できる作業単位」にしてしまいます。こういうのを思考の「階層化」と言います。そうすると「計算機が実施できる作業単位」の種類が増えますが、分割後の要素数は大幅に削減できます。

「よくある動作」をひとまとめにして「計算機が実施できる作業単位」にしてしまうという方法はとてもシンプルで効果的に見えるかもしれませんが、そうでもありません。目的の動作をどのように分割するかが「組み合わせ問題」になってしまうからです。単に細かく分割するだけなら単純作業で済みますが、ひとまとめにできる動作を残して分割する必要が出てきます。その結果、分割すべきかすべきでないかの選択が生じ、適切に選択しないとうまくまとめることができません。目的の動作の中に「よくある動作」を見つけて、そこは分割しないようにするわけですが、「よくある動作」は隠れている場合も多いのです。目的の動作についていろいろな手順を考え、その中で効率よく「よくある動作」を当てはめられるかを検討することになります。こういうのは「アルゴリズム的な検討」と言います。これも手順と「よくある動作」の組み合わせ問題になります。プログラマは日常的にこうした「組み合わせ問題」をトレーニングします。

あるレベル以上のプログラマはプログラムを作成するときに常にこういったことを無意識のレベルで考えています。その結果、「問題」に対して「手順」を何パターンも瞬時に検討することができるのです。僕くらいになると、ものの数秒でアルゴリズムで5パターンくらい、コードレベルで20パターンくらいを検討して、最適なものを2、3挙げることができます。

で、僕はこの能力をプログラミング以外に応用すべく研鑽を積んできたわけです。特に、「研究」という分野に。プログラミング問題に比べると、現実の問題は論理ステップ数がけた違いに少なく、アルゴリズム的には検討の余地がないくらいシンプルです。でも、「よくある動作」とか「実施できる作業単位」の種類が膨大です。プログラミングの場合は最終目標への「到達可能性」が保証(あるいは確信)されていることがほとんどです。なので、プログラミングの場合には有限の要素による有限の組み合わせを検討することになります。一方、「研究」では「到達可能性」は保証されません。そのため、目標の設定すら組み合わせ問題の一部になります。その結果、「研究」は、無限の要素によるほとんど無限の組み合わせを検討することになります。論理ステップ数が3桁ほど違いますが、組み合わせ問題としては、「研究」の方が難しいように思います。


研究を楽しいと感じるかどうか

学生の研究テーマの設定に関して、僕は妥協できません。それは僕の研究に対する哲学に基づいており、その哲学を説明してみました。僕はこうした研究の側面を、とても楽しい、と思っています。で、この思いを学生にも説明するわけです。

  1. 研究の最終目標に対して「ステップ」を考えなさい
  2. 各「ステップ」の実施方法・困難さを考えなさい
  3. 困難な「ステップ」に関しては「分割」を考えなさい
  4. どのような「分割」が考えられますか?
  5. 「分割」によって困難さがどのように変化するか評価しなさい
  6. より良い「ステップ」「分割」の組み合わせを常に探しなさい

全てのことをお膳立てしてもらって、それをこなすことで評価されて育ってきた学生にとって、非常に大きなパラダイムシフトの要求であることはわかっています。でも大学院を卒業した「高度人材」が、与えられた課題をこなすだけで生きていけるわけがありません。卒業までに世の中の仕組みと自分の役割を理解すべきです。一生懸命説明するんだけど、学生たちは真剣に取り合ってくれません。僕には、意味が分かりません。

研究におけるこうしたプロセスを「楽しい」と感じない限り、学会賞は取れないのかもしれません。



0 件のコメント: