下手くそなプログラムを修正してみた(最適化手法の基本的な問題に取り組んだ)
今回のnote記事は、ただ自分のプログラミング能力が少しはマシになったことを感じたというだけの記事です。
学部時代に機械学習の基礎に関する講義を受講したことがあります。それは、機械学習の基礎を学ぶ講義で、最適化手法・確率統計・機械学習の基礎と応用事例の概論を学びました。私はこの分野に興味があったため、その後の機械学習の応用的な話題や深層学習に関する講義も受講しました。
最適化手法のパートでは、基本的な最適化手法を学ぶということで、深層学習の学習の基盤にもなっている「勾配降下法」を学びました。その時のプログラミング課題で、ある関数の最適化を実装する課題が出ました。
当時は、Pythonで実装したのですが、今プログラムを見返すと、クソすぎです。
当時のプログラミング能力の問題点
現在のプログラミング力は、あの時よりはだいぶマシになっていると思います。課題提出時のプログラムを見て、今の自分は下記の3つが問題だと感じました。
※ 実際に提出したプログラムおよびレポート課題を公開することはできませんが、現在GithubにもアップロードしているPythonファイルよりはひどいもので、以下の3つの問題点を含んでいます。
(1) 関数を定義するdefがあちらこちらにあってわかりづらかった。
「初期値を定義。⇒ 目的関数の計算を初めて行う部分で、defで目的関数の値を求めるプログラムを作成 ⇒ 処理の続きを記す」という形をとっていて、あちらこちらにdefがありました。
「def ~~ 」はあちらこちらに散らばっているより、まとめて初めの方に記すのが適切です。そんなことも気にせずに作成されたプログラムを提出したあの頃から自分も成長したのだなあと感じてしまいました。
(2) 適当な関数を定義してスマートに記すべきだと感じる部分が散見された。
(3) 適当な行列演算として処理させるべき部分があった。
(2)と(3)は関連しているかもしれませんが、レポート課題で高度なライブラリの使用が禁止されているので仕方がない部分もありますが、処理の仕方の工夫次第で改善できる部分は多々あると感じました。こういう風にすればよいと思いつくのは経験値が増えたからだと感じました。
現在のプログラミング能力で再編集した結果
現在のプログラミング能力で再編集した結果は、Githubにもアップロードしています。また、どんな問題がレポート課題で出されて、どのように解いて、どんな結果が得られるかについて、まとめたPDFファイルはこちらです。
私はPythonのClassも十分に使いこなせません。まだまだ成長していく必要があります。研究や課題に向き合いながら、時には適当な本も読み、経験値をさらに増やしていきたいです。
※本ノートおよびアップロードしている資料について何かありましたら、noteのコメント欄までお願いします。
この記事が気に入ったらサポートをしてみませんか?