Eyes, JAPAN Blog > 経験則

経験則

beko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

時々、ソフトウェアの設計について、なぜそのような設計をしたのか、と聞かれることがあります。
場合によっては合理的に説明できることもあるのですが、「何となくそっちの方が良さそうだから」「勘」といった応答をすることも少なからずあります。
勘というと、あたかもテキトーに決めているかのように思われることもあるのですが、実際にはそれほどバカにできるものではありません。

現実的な問題の多くは最適化問題に帰着します。
つまり、ある与えられた条件の下で、最も適した解を求める、というものです。
ソフトウェアの設計も仕様、納期、拡張性、保守性、利用可能なリソースなどを条件とした最適化問題です。

最適化問題を解く時には、局所最適解に陥ってしまわないようにする必要があります。
局所最適解とは、限定された範囲内で良い解のことで、もっと広い範囲で見ると、より良い解が存在します。
常に局所最適解に陥っていないかを自問することは重要なことなのですが、現実的には最適解に到達するのは限りなく難しいと言えます。
というのも、条件のパラメータが多くなるにつれて、最適解に対する局所最適解の存在確率が跳ね上がるためです (次元の呪い)。
実際、現実世界で考慮すべきパラメータは細かく見ればかなりの数に上るはずです。

パラメータの中でも特に重要なものに重み付けをすることで、局所最適解の中でもより良質なものを優先して求めることは可能です。
しかし、パラメータの数は多い上、どれが本当に有用なパラメータなのかもそう簡単に決められるものではありません。
仕方がないので、実際にその問題に取り組んでみて、そのフィードバックからパラメータの重み付けを決定していくことになります。

そのパラメータの重み付けの偏りから生み出される、ぱっとした思いつきが勘であり、その合理性はパラメータの重みとして埋め込まれています。
そのため、ただの勘といえど、経験を積んだ人のものであれば、何らかの合理性を持っていると言うことが出来るでしょう。

担当: 齋藤 (勘は過剰適合の問題を引き起こしうるので取り扱いに注意しましょう)
  • このエントリーをはてなブックマークに追加

Comments are closed.