2024.12.10
“放置系”なのにサイバー攻撃を監視・検知、「統合ログ管理ツール」とは 最先端のログ管理体制を実現する方法
リンクをコピー
記事をブックマーク
Hiroyuki Vincent Yamazaki氏:では、コードをちょっと見てみましょう。
まず、Optunaのインストールですが、pipもしくはcondaでサクッと入るのがいいかなと思います。Optunaはpure Pythonなので、難しいコンパイラーのセットアップは一切必要ありません。簡単にインストールできると思います。
Optunaのコードを見ると、この1行がほぼ必ずと言っていいほど出てくると思います。この1行が何をしているかというと、先ほど出てきたStudyを作っています。特に引数を与えないで呼ぶと、メモリー上にStudyが作られて、すぐOptunaの実行ができます。
もう少し細かい設定を見てみましょう。
まず第1の引数として、Studyの名前を与えています。このStudyの名前は、Storageの中でユニークでなければいけません。identifier(識別子)の役割を果たしています。
最適化のアルゴリズムと、Pruningのアルゴリズムをここで指定します。いろいろなsamplerやprunerがあって、それぞれ引数で細かい挙動を制御できます。
storageに関しては、省くとメモリー上になりますし、このようにURIを指定するとRDBに接続できて、MySQLのデータベースがあれば接続も可能です。SQLiteのファイル名を指定すると、Optunaが自動的に作ってくれます。
こういうかたちの永続化も、特にRDBのセットアップは必要なくOptunaが自動的にやってくれるので、そんなに難しくはないかなと思います。
さらに、この問題が最大化もしくは最小化なのかをここで指定しています。それがdirectionです。
最後のload_if_existsは、Storageの中にmy-studyという名前のStudyがすでに存在している場合、例外にするか、もしくは例外にせずに読み込むかを制御する引数です。なんでこれが便利なのかは、のちほど共有します。
読み込むことによって、分析や続行ができると思ってもらえればいいかなと思います。
では、先ほど出てきた目的関数や探索空間をどうやってOptunaに渡すかというと、決して難しくはなくて、あるCallableをOptunaに渡してあげればよいです。こういうインターフェイスになっています。
Callableは、単純にTrialを1つ受け取ります。そして、目的関数の出力であるfloatを1つ出力します。多目的な場合は、floatを複数、例えばタプルで返すCallableを定義すればよいので、これぐらいの違いです。
まず、探索空間を定義します。探索空間をどのように定義するかというと、Trialのメソッドのsuggest_にfloat、categorical、intなどいろいろとハイパーパラメーターの種類によって使い分けて行います。最初のsuggest_floatは、先ほどの物体検出の閾値を、0から1の間で見つけたいと宣言しています。
例えばn_layersは、suggest_intでintが返って来るんですが、実際に返ってきたintをもとに、ここはn_channelsと動的に探索空間を定義することもOptunaだと簡単にできます。これが探索空間の定義の仕方です。
目的関数はどうかというと、これは学習のスクリプトみたいな、Optunaを導入する前にすでに使っていたものが考えられます。
なので、先ほどの学習の設定のハイパーパラメーターを呼び出しで渡して、それがどれだけよかったのかがわかればよいということになります。これを、Callableから返します。
ここまではStudyとその準備をしただけで、実際にTrialは回っていません。どのように回すかというと、Studyのoptimizeメソッドを呼びます。
これに先ほどのCallableを渡して、何回Trialを回すかをここでは指定します。そうすると、Trialが順番に1個ずつ、シークエンシャルに実行されていきます。
これが終了すると、StudyからTrialの履歴を引っ張ってきたり、一番よかったTrialをもって来たり、また一番よかったパラメーターをもってきたりが簡単にできます。
ちなみにこのbest_trialは、またobjectiveにそのまま渡せるので、再評価もできますし、パラメーターは普通にファイルにとっておいたり、これで再度モデルを学習し直したりなど、いろいろなケースが考えられると思います。
Optunaのもう1つ大きな特徴で、先ほどload_if_existsの話があったと思うのですが、あれをtrueにしておくと何が便利かというのがこちらです。
Optunaの分散実行についてお話しします。各Trialは独立していて、ロジックとしては独立しているということがあるので、Trialを1個ずつ回すのではなくて、同時に複数走らせることが考えられるかと思います。
先ほどのコードを1行も変えずに、Pythonの違うインタープリターのプロセスでキックするだけで、例えばRDBだったらRDBを介して情報のやり取りをしているので、分散の実行が簡単にできます。こういったかたちになっていて、これもOptunaの特徴の1つかなと思っています。
ここの仕組みがどうなっているか、今日はお話できるとおもしろいかなと思います。興味がある方はぜひ聞いてください。
これが、Optunaのとても簡単な概要です。
Optunaには、他にも機能がたくさんあります。今回は、含みきれないので、URLを貼っておくので、あとでよかったらスライドから辿って詳しく調べてください。
Optunaとしてがんばっているところが、結果の分析です。Optunaがよいというハイパーパラメーターを出力するのですが、どういう過程でよかったのか、目的関数の空間がどうなっているのか、みたいなのを目で確かめられます。
可視化の機能がたくさん入っていて、これをPythonのAPIから叩くことももちろんできますし、最近はOptunaのダッシュボードも開発されていて、こちらだとさらにインタラクティブにStudyの中身を分析できるので、よかったらぜひこちらもチェックしてください。
また「Ask-and-tell」という、わりと最近入ったAPIがあります。これは最適化を回す時に、Studyのoptimizeメソッドの代わりになるインターフェイスです。CallableでTrialを受け取るのではなくて、ユーザーが明示的にTrialを作ります。例えばハイパーパラメーターのsuggestだけをあるプロセスで呼んで、それをファイルに保存して、複雑な学習のパイプラインがあった時に、別のステップでそれを読み込んで評価したり、また別のステップでそれをOptunaに再度教えてあげたり、いろいろなパイプラインやプログラムに柔軟に対応できるインターフェイスになっています。
よかったら、こちらもぜひ見てみてください。
みなさんおわかりのとおり、ハイパーパラメーターは、日常的にいろいろな場面で出てきます。いろいろなライブラリを使っていても、出てきます。なので、頻出するパターンやライブラリに対しては、Optunaでは公式のユーティリティのような便利機能が複数あるので、自分が使っているライブラリがもしここにあったら、見てみてもいいかなと思います。
さらに、Optunaをインストールするとデフォルトでコマンドラインツールが入ります。これはStudyの操作やOptunaのバージョンを簡単にチェックできます。
あとは多種多様な公式のexampleもたくさんあるので、ここから入っていくのも入り口としてはいいかなと思います。ドキュメンテーションもみんながんばっているので、こちらもぜひ見てください。
今は、次のメジャーなアップデートであるv3のブレインストーミングをみんなでしているところです。こういう機能が欲しいとか、こういう改善をしてほしいとかがもしあれば、共有していただけると、考慮できるかもしれないなと思っています。
「そもそもv3ってどういう意味なの?」とか、「Optunaをプロダクションで使いたいんだけれども、バグがあった時に直してくれるの?」とか「急に互換性が壊れることはないのか?」という懸念もあると思います。今まではこういう話をあまりしたことがなくて、ドキュメンテーションにもあまりないと思うので、ちょっと共有させてください。リリースや互換性に対する考えです。
基本的には、Optunaはセマンティックバージョニングに従っていますというのが結論なのですが、今の最新のバージョンの2.8.0、2がMajor、8がMinor、0がPatchになります。
Patchは、Optunaはほぼ出しません。v1.0以降、たぶん1度も出していないと思います。本当に緊急性の高い修正などが考えられるかなと思います。
たぶん重要なのはMinorのほうで、今は定期的に約2ヶ月に1回リリースをするようにしています。なので、こういう周期でバグが修正されたり、新しい機能や改善が入って来ると思ってもらっていいかなと思います。
基本的にOptunaは、互換性はけっこう重要だと思っています。急に壊れるような変更は入れないようにしています。入れるとしても、Majorです。破壊的なエラーになってしまう変更や最適化の結果が変わってくる変更がこれに当たります。
このような破壊的な変更を入れる場合は、少なくとも早めに警告を出しつつ、Majorを1つ以上跨いで慎重に行っているので、急にみなさんのコードが壊れることはないと思います。ここは安心してもらっていいかなと思います。
逆に、実験的な機能は積極的に入れるようにしていて、主に研究や個人用途向けのものは、Experimentalの警告をコード、ないしはドキュメンテーションで言及しつつ入れているので、こういう機能が欲しいみたいなのは、どんどんPR出してもらえると、Experimentalとして早期導入できるかもしれません。
最後になりますが、Optunaは常にコントリビューションを歓迎しているので、ぜひPRやissueは構えずに出してください。すでに出してくれている方もいるかもしれません。引き続きよろしくお願いします。
具体的なステップは、Step-by-stepガイドを見てもらえるとありますし、例えば「PyCon」とかもあると思うのですが、そういうイベントにも積極的にみんなで出たいと思っているので、TwitterなどのSNSのアカウントもフォローしてもらえると、そういう情報もキャッチアップしやすいかなと思います。
Optunaの紹介は以上です。どうもご清聴ありがとうございました。
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.09
10点満点中7点の部下に言うべきこと 部下を育成できない上司の特徴トップ5
2024.12.09
国内の有名ホテルでは、マグロ丼がなんと1杯「24,000円」 「良いものをより安く」を追いすぎた日本にとって値上げが重要な理由
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
職場であえて「不機嫌」を出したほうがいいタイプ NOと言えない人のための人間関係をラクにするヒント
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.06
嫌いな相手の行動が気になって仕方ない… 臨床心理士が教える、人間関係のストレスを軽くする知恵
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
2024.12.11
大企業への転職前に感じた、「なんか違うかも」の違和感の正体 「親が喜ぶ」「モテそう」ではない、自分の判断基準を持つカギ
PR | 2024.11.22
「闇雲なAI導入」から脱却せよ Zoom・パーソル・THE GUILD幹部が語る、従業員と顧客体験を高めるAI戦略の要諦