HOME

特集:最適化を考える

レンズの自動修正と局所最適化での不思議

東京工芸大学 工学部 メディア画像学科 渋谷 眞人 教授

1.はじめに―レンズ設計の基本―

レンズの実際の設計は、多くの場合、まず似たような設計仕様の従来光学系を探してきます。設計にとってもっとも重要な仕様であるFナンバーと画角をほぼ満足することが必要で、その次に焦点距離が大きく違っていないことが望まれます。次にこの従来光学系を基本に、設計パラメター(曲率半径・レンズ厚さ・空気間隔・ガラスの屈折率・ガラスの分散(波長が変わったときの屈折率の変化を示す指標)など)を変え、収差が小さくなるように設計していきます。物体の一点から出た光は像面上の理想的な一点に集光することが望ましいのですが、実際はそのようには集光しません。この乖離が「収差」で、これを小さくするのがレンズ設計の仕事です。収差が小さくならないときには、レンズを追加したり、さらには非球面を用いたりして、設計を進めていきます[1]。計算機がこの作業を自動的に行うことを自動設計、あるいは自動修正と言います。

私がレンズ設計を始めた1977年頃には計算機の能力が十分でなく、レンズの自動設計は少なくとも会話型では殆ど使われていませんでした。しかし、当時でも大型計算機との会話(TSS:Time Shearing Systemといって、20個くらいの計算機端末が大型計算機のCPUを順番に使う仕組みです)で、目標である収差yiと変数であるレンズパラメターxjとの間の線型な関係aij≡yi/xjを求めていました(もちろん実際には線型ではありません)。行列Aは変化表と呼ばれ、収差n個とパラメターm個の微小変化をΔyi、Δxjとすれば、これらの関係は次式で表すことができます。

n>mのときには、一般には等号を成立させることはできませんから、等号はできるだけ近づけるという意味になります(端的には後述する評価関数を小さくするということになります)。(1)式から(あるいは変化表Aから)、どのパラメターがどの収差に影響するかということは一目瞭然です。そこで、あるパラメターを大きく動かしてある重要な収差を大きく改善させる試みがなされることになります。さらに精細に収差を良くするために、変化表から、重要な収差とそれに対して効果の大きいパラメターとを同じ数だけ選び、連立1次方程式を解いて、収差補正を進めることができます。変化表は線型な領域にしか使えないので、徐々に収差低減を進めることになり、また時々変化表を取り直すことになります。これがレンズ設計の基本作業なのですが、実際には行き詰まることが殆どです。ここで変化表をじっくり見ても、収差間の相関から、このレンズタイプは収差補正が容易なのか困難なのか見えてきて、行き詰まった理由が分かります。行き詰まったときには、変化表から予想されるものとは全く異なるような思考で、大きくパラメターを動かしたりレンズを追加したりします(この作業はあまり文書化されておらず、ここに設計者のセンスの差が出てくるようです)。その後、変化表に基づく作業を再び進めていきます。

2.レンズの自動設計

(1)式を解くだけなら、計算機に全て任せる方が効率が良いわけで、それがレンズの自動設計です。様々な収差を補正しなければなりませんから、目標はベクトルで考える必要がありますが、収差補正の良し悪しを単一の値(スカラー)で代表する評価関数というものを考えます。直接には評価関数を考えない自動設計もありますが、以下に示す評価関数を考えた定性的な説明で、同じように理解して良いと思います。評価関数は各収差の現在値yiと目標値との残差の2乗和であり、次式で表されます(実際には収差によって重み付けを行います)。


図.1 評価関数の大域的変化

図.1は、横軸がパラメター、縦軸が評価関数Φです。ここではパラメターが一個ですが、実際にはm個のパラメター全てを考えることになります。パラメターを評価関数が減る方向に変化させることで収差補正(自動設計)が行われます。ただし、(1)式はあくまでパラメターの変化量と収差の変化量とが線型な関係にある範囲でしか成立しないので、少しずつ動かしていきます。最終的に、初期値Aから局所最適値Bに行きつくことになり、これを局所最適化(Local Optimization)と呼びます。大局的にはCの方がより優れているのですが、局所最適化ではCに行くことはできません。このCに行くための手法が大局最適化(大域的最適化、Global Optimization)です。


詳細はここでは述べませんが、いろいろな大局的最適化の手法が提案され、実際に使われています。局所解に陥ったときにここに土盛りをして、隣の局所解へと誘導させる方法があり[2]、非常に実践的な手法と考えられます。Simulated−Annealingという方法もあり、これは、パラメターをランダムに変化させて、収差が悪くなるような場合であっても、適当な確率(ボルツマン分布のように与えるのでSimulated−Annealingと呼ぶ)でそれを採用して、改めて局所最適化を行うものです。あるいは遺伝的アルゴリズムという方法もあります。遺伝の考え方によって、2つの親データから外挿したデータも適当な確率で存在できるようにした上、さらに最良データだけでなく悪いデータも残すようにして、遺伝の操作を繰り返して行ない最適化を進めていくやり方です[3]。CODE VにはGlobal Synthesisと呼ばれる大局的最適化が備わっています。私の研究室でも用いたことがあるのですが、非常に有効な最適手法でした。このように一口に大局最適化といっても様々な手法があり、局所最適化に近いものから、大きく異なっているものまで様々です。局所最適化あるいはそれに近いものは自動修正、大局的最適化を自動設計と、区別して呼ぶこともあります。

なお、自動設計は単に設計効率を高めるだけではありません。極限の収差が要求されるステッパー光学系の設計などは、この自動設計が使えないとすると、まず設計自体ができないでしょう(古典的な光学の教科書には、ストレール強度が0.8より大きければほぼ無収差と考えられるというマーシャルの基準が書かれていますが、現在のステッパー光学系は広い視野全域で0.99程度が要求されています)。

3.局所最適化に見られる不思議

現在、極めて一般的に用いられている局所最適化手法であるDLS法(Damped Least Squre)について簡単に述べます[1,4]。(1)式の線型な関係はパラメターの変化量Δxが小さければ成立します。そこで、パラメターの変化量の目標値をゼロ(零)として追加することで、パラメターが大きく動かないようにしたものがDLS法です。この関係を式で書けば、


図.2 自動設計初期値


図.3 評価関数の変動


図.4 自動設計最終値


図.5 評価関数の変化


図.6 多面体表面を解とする自動修正

と表すことができます。ここで、ρはダンピングファクターと呼ばれるもので、これが大きいほどパラメターが変化しにくくなるのです。Iはm×mの単位行列です。自動修正の目標としての「評価関数」を

とします。すでに(1)、(2)式のところで説明したように、(4)式右辺第1項の中のyiは収差の現在値、Δyiが線型の範囲で予想される変化量、が収差の目標値(理想値)です。第1項は収差だけによる本来の評価関数Φであり、第2項がパラメターの変動の効果です。すべてのパラメターΔyjによる評価関数Φ′の微分(偏微分)がゼロになるとして、次式のように解が求まります[1,4]。

図.1の説明から、局所最適化による自動修正では、評価関数が小さくなる方向にしか変化しないように見えます。しかし、実際に局所最適化を行ってみると、(2)式で表される評価関数が一度は大きくなってから再び小さくなることがあります。このことを肌で感じているレンズ設計者も多くいるかもしれませんが、公の場では殆ど話題になっていないようです。この現象は自動修正を理解し、発展させる上で重要な示唆を与えているようにも思えるので、ここで紹介します。

図.2は初期のレンズデータです。これにCODE Vで局所最適化を行いました。デフォルトで与えられた評価関数((4)式ではなく(2)式に相当)の値の変化を図.3に示します。評価関数が一度大きくなって再度小さくなっていることがわかります。最終的に得られたレンズ形状を図.4に示します。

DLSでは、パラメターの変化分の効果は、図.5の点線に示すように、現在地を頂点とした放物線で描かれるわけで、これを追加しても、全体の評価関数は太い実線のようになるだけで、局所最適値から抜け出せるようには思えません。それでも実際には、多くの収差やパラメターを考えていることや、目標とする評価関数Φ′にパラメター自身の変化が加わることから、元の評価関数Φが一度大きくなり再び小さくなるということもあるのでは?と考えるかもしれません。あるいは、たまたま山の高さや幅が小さかったから、偶然乗り越えてしまったということも、あり得なくはないと思います。しかし、DLS以外の、それも極めて単純に連立方程式を解くような手法においても、同じように評価関数Φが一度大きくなって、改めて収束することがよくあるのです。それも、最初の数回だけではなく、ずっとΦが大きくなって行くようなときでも、最後には収束するのです。

(1)式の連立方程式を単純に解こうとすると、実際の収差では独立ではないものが多く、目標の収差の数nをパラメターの数mより小さくしないと(n≦m)、きちんとした解にはなりません[5]。そこでn≦mとなるように目標収差とパラメターを選びますが、単純にn元連立1次方程式を解くならば、パラメターがm−n個余ってしまいます。残ったパラメターも有効に使うことが望ましいので、図.6のように解を求めることにします。図.6では、簡単にするため、目標収差の数を2個(Δy1、Δy2)、パラメターの数を3個(Δx1、Δx2、Δx3)としています。各パラメターによる収差の変化ベクトルa1,a2,a3(これは行列Aの列ベクトルに相当する)が線型性の成り立つ大きさとして、Δxiの絶対値が1より大きくならない範囲で解を求めることになります。つまり、目標値に向かうベクトルが、この3つのパラメターで作る多面体の表面を突き抜ける位置をΔxの解とすることになります。図.6の例では |Δx1|=1、|Δx2|=1、|Δx3|<1です。この計算を、目標に達するまで繰り返し行ないます。


 

ここで、目標までの距離L0に対する多面体表面までの距離Lの比γ

を、「達成予想比」と定義します。目標を達成するときは、γは1を越えることになります(図6ではγは0.5くらいですが、実際のレンズ設計では0.1といったさらに小さい値から出発します)。(2)式で表される評価関数Φの、自動修正の各サイクルごとにその変化を見ます。このときΦが大きくなっても同時に達成予想比γが大きくなるようなときには、殆どの場合、そのうちに評価関数Φが小さくなってきます。この経験則を模式的に書くと図.7のようになります。γが1を越えたときに評価関数Φが収束してゼロになります(このプログラムではn<mなので、評価関数Φは収束するとゼロになります)。しかし、Φが大きくなるときにγが小さくなるようなときには、Φが再び小さくなることはないのです。


図.7 図6に示すような自動修正での、評価関数Φと目標達成率γの推移例(模式図)。途中でΦが大きくなってもγが大きくなる時は再び収束する。

このように、非常に単純な数学的処理であっても、評価関数の山を越えていくのです。これを「局所最適化の不思議」と、本稿では呼ばせてもらいました。「達成予想比」γという指標を考えることで、収束する場合と収束しない場合を、自動修正の初期から把握できるという経験則を紹介しましたが、その明確な解釈は得られていません。ここには、局所最適化の改良につながるヒントが隠されているように思えます。DLSにおいてもこのγに相当する指標を、打ち出すようにしてみてはどうでしょうか。


4.まとめ

レンズの自動設計について概要を述べ、「局所最適化についての不思議」について紹介させて頂きました。かなり以前から面白い現象だと思いながら、いまだにきちんとした検討ができていないのですが、この現象を解明することは、局所最適化だけでなく大局的最適化の改良にもつながるのではないかと考えています。

もしかすると、私が大げさに取り上げているだけで、レンズ自動設計の開発者にとっては、あるいはレンズ設計の名人にとっては当たり前のことなのかもしれませんし、あるいは、他分野では良く知られていることなのかもしれません。もしご存知であれば、忌憚なく教えていただければ、大変有難く思います。