Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Hiro H.
PDF, PPTX
6,172 views
関数の最小値を求めることから機械学習へ
2016年3月19日 札幌C++勉強会 #11 で発表 http://sapporocpp.connpass.com/event/26937/
Science
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 60
2
/ 60
3
/ 60
4
/ 60
5
/ 60
6
/ 60
7
/ 60
8
/ 60
9
/ 60
10
/ 60
11
/ 60
12
/ 60
13
/ 60
14
/ 60
15
/ 60
16
/ 60
17
/ 60
18
/ 60
19
/ 60
20
/ 60
21
/ 60
22
/ 60
23
/ 60
24
/ 60
25
/ 60
26
/ 60
27
/ 60
28
/ 60
29
/ 60
30
/ 60
31
/ 60
32
/ 60
33
/ 60
34
/ 60
35
/ 60
36
/ 60
37
/ 60
38
/ 60
39
/ 60
40
/ 60
41
/ 60
42
/ 60
43
/ 60
44
/ 60
45
/ 60
46
/ 60
47
/ 60
48
/ 60
49
/ 60
50
/ 60
51
/ 60
52
/ 60
53
/ 60
54
/ 60
55
/ 60
56
/ 60
57
/ 60
58
/ 60
59
/ 60
60
/ 60
More Related Content
PDF
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
ODP
(define)なしで再帰関数を定義する
by
blackenedgold
PDF
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
PDF
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
by
Hiro H.
PDF
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
by
Hiro H.
PDF
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
PDF
Pythonデータ分析 第3回勉強会資料 8章
by
Makoto Kawano
PDF
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
by
Hiro H.
C++のライブラリを簡単に眺めてみよう
by
Hiro H.
(define)なしで再帰関数を定義する
by
blackenedgold
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
by
Hiro H.
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
by
Hiro H.
2011.7.3 札幌C++勉強会#2「C++のマクロはどこまで関数をいじれるのか」
by
Hiro H.
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
by
Hiro H.
Pythonデータ分析 第3回勉強会資料 8章
by
Makoto Kawano
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
by
Hiro H.
What's hot
PDF
関数プログラミング入門
by
Hideyuki Tanaka
PDF
第2回 JavaScriptから始めるプログラミング2016
by
kyoto university
PDF
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
PDF
Introduction to Categorical Programming
by
Masahiro Sakai
ODP
Real World OCamlを読んでLispと協調してみた
by
blackenedgold
PDF
自動定理証明の紹介
by
Masahiro Sakai
PDF
すごいHaskell楽しく学ぼう 第6章
by
aomori ringo
PDF
brainfuckを吐く自作言語bf-reusable
by
roodni
PDF
関数型プログラミング入門 with OCaml
by
Haruka Oikawa
PDF
Scala 初心者が米田の補題を Scala で考えてみた
by
Kazuyuki TAKASE
PDF
Pfi Seminar 2010 1 7
by
Preferred Networks
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
PPTX
Map
by
kikairoya
PDF
第3回 JavaScriptから始めるプログラミング2016
by
kyoto university
PDF
Introduction to Categorical Programming (Revised)
by
Masahiro Sakai
PDF
第四回 JavaScriptから始めるプログラミング2016
by
kyoto university
PDF
Hupc 1
by
Hiroki Takeda
PDF
これからの「言語」の話をしよう ―― 未来を生きるためのツール
by
Nobuhisa Koizumi
PPTX
すうがく初めの一歩
by
Lina Katayose
KEY
by
a-hisame
関数プログラミング入門
by
Hideyuki Tanaka
第2回 JavaScriptから始めるプログラミング2016
by
kyoto university
C++コミュニティーの中心でC++をDISる
by
Hideyuki Tanaka
Introduction to Categorical Programming
by
Masahiro Sakai
Real World OCamlを読んでLispと協調してみた
by
blackenedgold
自動定理証明の紹介
by
Masahiro Sakai
すごいHaskell楽しく学ぼう 第6章
by
aomori ringo
brainfuckを吐く自作言語bf-reusable
by
roodni
関数型プログラミング入門 with OCaml
by
Haruka Oikawa
Scala 初心者が米田の補題を Scala で考えてみた
by
Kazuyuki TAKASE
Pfi Seminar 2010 1 7
by
Preferred Networks
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
by
kiki utagawa
Map
by
kikairoya
第3回 JavaScriptから始めるプログラミング2016
by
kyoto university
Introduction to Categorical Programming (Revised)
by
Masahiro Sakai
第四回 JavaScriptから始めるプログラミング2016
by
kyoto university
Hupc 1
by
Hiroki Takeda
これからの「言語」の話をしよう ―― 未来を生きるためのツール
by
Nobuhisa Koizumi
すうがく初めの一歩
by
Lina Katayose
by
a-hisame
Similar to 関数の最小値を求めることから機械学習へ
PDF
自然言語処理のための機械学習入門1章
by
Hiroki Mizukami
PDF
双対性
by
Yoichi Iwata
PDF
様々な全域木問題
by
tmaehara
PDF
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
by
hirokazutanaka
PDF
SMO徹底入門 - SVMをちゃんと実装する
by
sleepy_yoshi
PDF
CVIM#11 3. 最小化のための数値計算
by
sleepy_yoshi
PDF
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
by
Toshiyuki Shimono
PDF
PRML 10.4 - 10.6
by
Akira Miyazawa
PDF
大規模凸最適化問題に対する勾配法
by
京都大学大学院情報学研究科数理工学専攻
PDF
クラシックな機械学習の入門 6. 最適化と学習アルゴリズム
by
Hiroshi Nakagawa
PDF
PRML4.3.3
by
sleepy_yoshi
PPTX
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
by
tomitomi3 tomitomi3
PPTX
Prml 1.3~1.6 ver3
by
Toshihiko Iio
PDF
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
by
hirokazutanaka
PDF
Convex optimization
by
Simossyi Funabashi
PPTX
PRML Chapter 5
by
Masahito Ohue
PDF
PRML 5.2.1-5.3.3 ニューラルネットワークの学習 (誤差逆伝播) / Training Neural Networks (Backpropa...
by
Akihiro Nitta
PPTX
SVM
by
Yuki Nakayama
PDF
SVM
by
Yuki Nakayama
PDF
Incremental
by
Naotaka Yamada
自然言語処理のための機械学習入門1章
by
Hiroki Mizukami
双対性
by
Yoichi Iwata
様々な全域木問題
by
tmaehara
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
by
hirokazutanaka
SMO徹底入門 - SVMをちゃんと実装する
by
sleepy_yoshi
CVIM#11 3. 最小化のための数値計算
by
sleepy_yoshi
PRML輪講用資料10章(パターン認識と機械学習,近似推論法)
by
Toshiyuki Shimono
PRML 10.4 - 10.6
by
Akira Miyazawa
大規模凸最適化問題に対する勾配法
by
京都大学大学院情報学研究科数理工学専攻
クラシックな機械学習の入門 6. 最適化と学習アルゴリズム
by
Hiroshi Nakagawa
PRML4.3.3
by
sleepy_yoshi
第9回 KAIM 金沢人工知能勉強会 進化的計算と最適化 / Evolutionary computation and optimization(移行済)
by
tomitomi3 tomitomi3
Prml 1.3~1.6 ver3
by
Toshihiko Iio
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
by
hirokazutanaka
Convex optimization
by
Simossyi Funabashi
PRML Chapter 5
by
Masahito Ohue
PRML 5.2.1-5.3.3 ニューラルネットワークの学習 (誤差逆伝播) / Training Neural Networks (Backpropa...
by
Akihiro Nitta
SVM
by
Yuki Nakayama
SVM
by
Yuki Nakayama
Incremental
by
Naotaka Yamada
More from Hiro H.
PDF
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
PDF
rsyncで差分バックアップしようぜ!
by
Hiro H.
PDF
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
PDF
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
PDF
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
PDF
名古屋市営地下鉄最小距離完乗
by
Hiro H.
PDF
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
PDF
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
by
Hiro H.
PDF
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
PDF
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
PDF
MSYS2使いはじめました
by
Hiro H.
PDF
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
PDF
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
PDF
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
PDF
PCSじゃないよ、PCAだよ
by
Hiro H.
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PDF
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
PDF
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
PDF
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
PDF
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
シンデレラガールズの「シンプルな」カードゲームを作りたい(アイマスハッカソン2024)
by
Hiro H.
rsyncで差分バックアップしようぜ!
by
Hiro H.
式を書くだけで最適化計算してほしい!~CVXPY編~
by
Hiro H.
pandas便利だけどデフォルトパラメータでファイルを読み込むな!
by
Hiro H.
旅行「#重複乗車禁止で名鉄完乗」とその数学的な解説
by
Hiro H.
名古屋市営地下鉄最小距離完乗
by
Hiro H.
配列の要素挿入・削除もランダムアクセスも両方高速にできる?
by
Hiro H.
角錐や円錐が、角柱や円柱の体積の3分の1であることを積分・極限抜きで証明してみる
by
Hiro H.
最近デレステ創作譜面作ってるので技術的な見地から話します
by
Hiro H.
スマホ音楽ゲームの動画から譜面をデータ化したかった
by
Hiro H.
MSYS2使いはじめました
by
Hiro H.
シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?(23:20更新)
by
Hiro H.
「MVが3人な曲の一覧」って取得できます?(デレステ・ミリシタ・エムステ)
by
Hiro H.
デレステの劇場で登場したアイドルの回数の統計取ってます
by
Hiro H.
PCSじゃないよ、PCAだよ
by
Hiro H.
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
札幌C++勉強会 #13「最近、仕事でC++11以降の新規格が役に立ったシーン紹介」
by
Hiro H.
わんくま同盟 名古屋勉強会 #43 ライトニングトーク「Firefoxがver.57~(Quantum)にアップグレードされて困ったこと・やったこと」
by
Hiro H.
声優やぞ!~シンデレラガールズにおける配役の歴史のRDFデータ化~
by
Hiro H.
シンデレラガールズ声優の増え方まとめ
by
Hiro H.
関数の最小値を求めることから機械学習へ
1.
札幌C++勉強会 #11 (2016.3.19) 関数の最小値を求めること から 機械学習へ H.Hiro
@h_hiro_
2.
自己紹介 H.Hiro http://hhiro.net/ http://twitter.com/h_hiro_ • もともと札幌にいましたが、今年度当初から名古屋在住 •
情報系の研究の仕事をしています • 今の仕事についてしばらくは RやMatlabを使ったりもしたけど 最近はC++ばかり • 趣味では以前からだけど Rubyメイン
3.
はじめに
4.
はじめに • 今回は何かと数学の話が多いので なるべく用語を増やしすぎないようにしています • なので「用語だけ出す」場合も多いです (この発表では説明しないけど、気になったら ぐぐれるように、という意味で) •
スライドはこちらにあるので、よろしければ http://www.slideshare.net/maraigue • サンプルコードはこちら https://github.com/maraigue/sapporocpp-20160319
5.
1. 今回のテーマ
6.
関数の最小値を求める(1/4) 例えば、中学・高校数学でおなじみの二次関数 f(x) = 2x2
+ 1 これの最小値は?また、これを最小にするxは?
7.
関数の最小値を求める(2/4) f(x) = 2x2
+ 8x + 1 これの最小値は?また、これを最小にするxは?
8.
関数の最小値を求める(3/4) f(x) = (x
- 1)4 + (x - 2)2 - 4√x + 3 これの最小値は?また、これを最小にするxは?
9.
関数の最小値を求める(4/4) • 与えられた式を最小化するような変数の値を求める • 手計算でできることもあれば、そうでないこともある •
今回は特に、手計算でできるとは限らない場合を 扱う (そうでないとプログラムを書く必要はないので、当たり前と言えば 当たり前ですが) • 最大化問題も全く同様に考えることができるので 今回の発表では最小化だけ扱う (一般に「最適化」という)
10.
で、これが どう機械学習と 関わるのか?
11.
の前に、 「機械学習」について 概要を
12.
「機械学習」とは • いろんな解説があるけど • 基本的には、コンピュータによる判断・推測を •
人手でルールを記述するのではなく • データをもとにルールを作ること • 人の「学習」プロセスを、コンピュータ等に 模倣させるという意味合い
13.
「機械学習」とは • 例えば、最近Googleが見せて話題になったもの • 画像分類 •
囲碁AI • 事例を多数用意しておく 答えが分かっている画像(この画像は猫である)とか 囲碁で勝てた打ち方とか • 行いたい出力(処理)を、その事例に合う形に調整する 画像の分類条件とか 実際にAIが打つ手とか
14.
「関数の最小化」から「機械学習」 機械学習では多くの場合、こんな流れになる • 学習結果をうまく表現できそうな数式やデータ構造を 決める。そのとき、 「学習するデータからの外れ具合」 を計算できるようにしておく。 例:“学習がうまくいけば、データを
(p, q) としたとき、 f(a, b) = ap + bq − 1 が最小になるはずだ。” • その中にある変数(パラメータ)を、データに 合うように調整する。これが「関数の最小化」となる。 例:実際のデータが用意できた。実際に f(a, b) を作って、 最小になるような a, b を計算しよう。
15.
2. 機械学習の 簡単な問題を 関数として見てみる
16.
機械学習での例(1/3) • 座標空間上に2種類のデータが置かれているとする • それを分類する条件を求めたい(2値分類) 例えば、青が「猫の画像」赤が「犬の画像」とか どうやって座標空間に置くか、という話も大事な話ではあるのだが (特徴抽出/特徴選択)、今回はそこは扱いません。
17.
機械学習での例(2/3) • 例えば、直線 y
= ax + b でこの二つを分けたいとする。 (「線形分類」という) • 最小化したい関数 f(a, b): 分離できていない点の数 直線でなくても基本的なアイデアは同じです • ↑と書いておくと、「パラメータ a, b を調整する問題」 とみなせる ←こっちが青 こっちが赤→
18.
機械学習での例(3/3) 機械学習としては簡単なほうな例 (2種類しか分類できない、直線でしか分類できない) を扱ったものの、これだけでも考えることは結構多い • そもそも解ける? • 解けるなら、どうやったら効率よく計算できる? 「どんな関数を最小化しようとしているのか」 意識することで、それが分かってくる(必ずではないけど)
19.
ここからお話しすること もし以下のキーワードをご存知であれば、 こんな話をするのだと思っていていただければと 思います。 • 極小値、局所解 • 凸関数 •
(多変数関数の)勾配
20.
今回やること 1. 手計算で最小値を 求めにくい関数 (x -
1)4 + (x - 2)2 - 4√x + 3 の最小値を求める 2. 線形分類問題を解く
21.
3. 「関数の最小化」と いっても どんな最小値?
22.
「最小値」の種類 • 左の図のように、「いま見ている地点の付近だけ 見て動けば、自然と最小値に辿り着ける」関数は 扱いが簡単 • 逆に右の図のような場合は難しい
23.
極小値 • 周辺のどこに行っても値が大きくなる場所 • 極小値が複数あることを想定しないとならない場合、 最小値を求めるのが非常に面倒になる 実際の最小点を「大域解」、最小とは限らない極小点を「局所解」という •
まずは極小値が一つしか存在しない場合を考える 極小値は1つ 極小値は3つ
24.
今回やること(再掲) 1. 最初に出した例 (x -
1)4 + (x - 2)2 - 4√x + 3 の最小値を求める 2. 線形分類問題を解く
25.
今回やること(再掲) 1. 最初に出した例 (x - 1)4
+ (x - 2)2 - 4√x + 3 の最小値を求める →見るからに極小値は一つ!
26.
今回やること(再掲) 2. 線形分類問題を解く →残念ながら 極小値は一つにならない。 なので、後で説明するが、 極小値が一つになるように 問題を変形するのが常套手段。 解けないとどうしようもないし。 誤分類数 3 5 3
27.
4. 「関数の最小化」が 特に楽なもの: 凸関数
28.
極小値が一つでも… 最小化が簡単なものとそうでないものがある。 左の図のようになっていると、コンピュータにとっても 計算が楽になる。 具体的には、最小値に収束する(=いくらでも近づける)アルゴリズムが 構築できる。 ボールを転がして 最小値へ持って いくとすると、 面に沿って転がっていく 面を離れてしまうことがある
29.
凸関数(1/2) 前ページで示したことに対する数学的な概念として 「凸関数」がある。 直感的には、下図のように「上から見たときに、へこんで いる場所がない」関数のこと 凸ではない極小値が一つの関数凸な極小値が一つの関数
30.
凸関数(2/2) • 凸関数のより数学的な定義: 右図のように「どの2点間に 直線の橋(赤線)をかけても 地面にぶつからない」 直線は凸関数とみなす(広義凸関数) 計算の都合上「凸関数で ないものを凸関数で近似する」 ことが行われるくらい便利 凸関数である 凸関数でない ぶつかる↓
31.
例 • 実は、最初に出した三つの例はどれも凸関数 • f(x)
= 2x2 + 1 • f(x) = 2x2 + 8x + 1 • f(x) = (x - 1)4 + (x - 2)2 - 4√x + 3 これに数学的な操作を施してみる
32.
凸関数の数学的な特徴 微分可能な1変数凸関数は: 2変数以上の場合はあとで述べる。 • 微分結果(導関数)が単調増加 • 最小化される点においては 微分係数が0になる (定義域に制限がない場合) 微分:簡単に言えば「傾き」 右下に向いていればマイナス、 右上に向いていればプラス ↓微分(導関数) 最小→ 0になる→
33.
• さっきの「最小化される点においては、微分係数が 0になる」を計算してみる • f’(x)
= 4x = 0 ⇒ x = 0 • f’(x) = 4x + 8x = 0 ⇒ x = ー2 • f’(x) = 4(x - 1)3 + 2(x - 2) - 2/√x + 3 = 0 ⇒ ??? 例 • 実は、最初に出した三つの例はどれも凸関数 • f(x) = 2x2 + 1 • f(x) = 2x2 + 8x + 1 • f(x) = (x - 1)4 + (x - 2)2 - 4√x + 3
34.
使う道具:ニュートン法(1/2) • 手計算で値が求められないなら、コンピュータに がんばってもらえばいいじゃない • 今回は「ニュートン法」を使う。 g(x)
= 0 の形の方程式を解く方法 ただし、g(x) が微分可能である必要がある • g(x) = f’(x) = 4(x - 1)3 + 2(x - 2) - 2/√x + 3 = 0 を 解いてみよう
35.
ライブコーディングします。 • g(x) =
f’(x) = 4(x - 1)3 + 2(x - 2) - 2/√x + 3 ⇒ g’(x) = 12(x − 1)2 + 2 - 1/(√x + 3)3 • ニュートン法の式はここを参考にします http://akita-nct.jp/yamamoto/lecture/2005/5E/ nonlinear_equation/text/html/node4.html
36.
使う道具:ニュートン法(2/2) ニュートン法自体は目新しいわけではないのだが こういった「基本的な手段の組み合わせで解ける」 ようにすると、数値計算上も都合がよい。 今回の問題だと • 凸関数 • 2階微分可能 ということを確認できたおかげで、ニュートン法に 到達できた。
37.
5. 凸関数の最小化を 2変数以上に増やす
38.
2変数以上の場合(1/3) • さっきの分類問題のように、機械学習では 2変数以上の場合も扱わないとならない 時には、万単位の変数を使うことも • 凸関数の定義は同じ •
最小化の際は、1階微分の代わりに「勾配」、2階微分の 代わりに「ヘッシアン」を使えばよい • 勾配:どれか1変数についてだけ微分したもの(偏微分)を 全変数について集めてベクトルにしたもの • ヘッシアン:あらゆる2変数の 組み合わせについて1回ずつ 微分したものを、全組み合わせに ついて並べて行列にしたもの(右式)
39.
2変数以上の場合(2/3) • 勾配やヘッシアンを考えるのは、「どう動けば最小化 できるかを、全変数の組み合わせについて考えないと ならない」ため 例(右図) 横がa軸、奥行がb軸、 高さが関数 f(a,
b) とする。 関数を最小化する 向き(矢印)は無数に 考えられる。
40.
2変数以上の場合(3/3) • 勾配やヘッシアンを考えるのは、「どう動けば最小化 できるかを、全変数の組み合わせについて考えないと ならない」ため • ただし問題によっては、これらを全部考えなくても よい。あるいは、全部考えなくてよいように問題を 単純化することがある。 •
特にヘッシアンは、変数の数の2乗でサイズが大きくなることや、 ヘッシアンの「逆行列」という重い演算を使わないとならないため 回避しても答えが出るのであれば便利。 • 1変数ずつ順に最小化してもよいのであればヘッシアンはいらない。 また「準ニュートン法」という、明示的にヘッシアンを求めず 逐次的に更新することで得る方法もある。
41.
例題 • f(x, y)
= x2 + 2xy + 3y2 + 4x + 5y + 6 の最小値を求める • 実装は準ニュートン法 (2階微分=ヘッシアンを直接求めず、それに類する 行列を逐次更新しながら求める) • グラフを表示してみる gnuplotだと splot [-3:3][-3:3]x*x + 2*x*y + 3*y*y + 4*x + 5*y + 6 • 手計算の結果と比較する 凸関数であることの確認は省略するが、凸関数であることがわかっている ならば、 f(x, y) の x, y それぞれについての偏微分から 2x + 2y + 4 = 0, 2x + 6y + 5 = 0 の両方が満たされれば最小値を取る
42.
いよいよ さっきの分類問題を解きます
43.
2変数以上の凸関数を 最小化する例(1/4) • さっきの線形分類問題 • 境界線が
y = ax + b では ちょっと扱いが面倒なので ax + by - 1 = 0 とします • その上で、「点(x, y)が ax + by - 1 > 0 なら赤、 ax + by - 1 < 0 なら青」 として判定します ax + by - 1 > 0ax + by - 1 < 0
44.
2変数以上の凸関数を 最小化する例(1/4) • 少し補足: 「ax +
by - 1 > 0 なら赤」は 「(a, b)・(x, y) > 1なら赤」と 同じ ただし、「・」は内積 ax + by - 1 > 0ax + by - 1 < 0 O (原点) ベクトル(a, b) (境界線に垂直) ベクトル(x, y)
45.
2変数以上の凸関数を 最小化する例(2/4) • 最小化すべき値として さっきは 「分類を間違えた数」を 使うと言いましたが 残念ながら 凸関数になりません。 ax +
by - 1 > 0ax + by - 1 < 0 「分類を間違えた数」だと… 境界
46.
2変数以上の凸関数を 最小化する例(2/4) そこで代わりに 「ax + by
- 1 > 0 なら赤」の 条件に着目します •赤い点が条件を満たす → 関数値は0 •赤い点が条件を満たさず → 関数値は「-(ax + by - 1)」 0 2 0 0 3 0 0 0 0 0 0 0 0 2 「分類を間違えた数」だと… 境界 ここで書いた式だと…凸関数! 境界 ax + by - 1 > 0ax + by - 1 < 0
47.
2変数以上の凸関数を 最小化する例(3/4) 与えられた点を {(p1, q1), ...
, (pn, qn)} と書くと 最小化したい式 f(a, b) は こう書ける f(a, b) = Σn i=1{[ci(api + bqi - 1)]+} •ciは、点iが赤なら-1、点iが青なら1を返す •(T)+ は、Tが正のときはその値そのもの、Tが負のときは0を返す 0 2 0 0 3 0 0 0 0 0 0 0 0 2 ax + by - 1 > 0ax + by - 1 < 0
48.
計算してみます • アイデアとしては 「aを変化させて関数値を最小化」 「bを変化させて関数値を最小化」 「aを変化させて関数値を最小化」 …と繰り返しています 実際は、「双対問題」という形に変形して解くことが多く、その方が 効率的なのですが、かなり追加の説明が必要なので扱いません • 式が単純なので、
「変数を一つ変更したときの 最小値」は、ニュートン法のような方法を使わずとも 求められてしまいます(どちらかといえば力技)
49.
計算してみます • 1変数ずつ最小化する、という前提であったので aについて最小化する場合を考える • [ci(api
+ bqi - 1)]+ は下のような形をしている データ点1 データ点2 データ点3 必ず、どちらか 一端は0になる データ点ごとに グラフを描ける a
50.
計算してみます • これを全データについて足すとこんな形になる • それぞれのデータ点の「曲がり角」を覚えておけば その中で値が最小のものを選べばよい 曲がり角になる条件は
ci(api + bqi - 1) = 0 ただしこのほかに「曲がり角一覧をソートする」という処理も入るので、 データ数が増えると重いです。今回は例なので単純な方法を使います。 a
51.
サンプルコードをお見せします &実際に動かしてみます
52.
2変数以上の凸関数を 最小化する例(補足) 「境界線からの距離」を基準にすると、実はサポート ベクトルマシン(SVM)に近い計算をしていることになる • 十数年前に話題になった機械学習 手法。アイデアとしては「境界線が いかに二つのクラスから離れているか」 • 高速&わかりやすい実装としては LIBSVMが有名 今回の問題設定 境界 SVM 境界 ax
+ by - 1 > 0ax + by - 1 < 0
53.
6. 他の最小化が難しい 関数と、その対策
54.
凸関数ではないけど 極小値が一つだとわかっていたら?
55.
凸関数ではないけど極小値が 一つの場合の最小化 • 基本的には、傾きを見て下がるほうに移動すれば よいのだが、「効率が悪い」とか「収束が保証 されない」とかの問題がある • 何が問題かというと、 移動幅(矢印の幅)を 事前に決められない •
徐々に小さくしていくという 作戦はよく用いられる (ただし万能ではない) 凸ではない極小値が一つの関数 面を離れてしまうことがある
56.
凸関数ではないけど極小値が 一つの場合の最小化 • 基本的には、傾きを見て下がるほうに移動すれば よいのだが、「効率が悪い」とか「収束が保証 されない」とかの問題がある • 何が問題かというと、 移動幅(矢印の幅)を 事前に決められない •
徐々に小さくしていくという 作戦はよく用いられる (ただし万能ではない) このあたりで動きを 小さくすると このあたりでも 動きが小さいまま
57.
そもそも極小値が一つとは 限らなければ?
58.
極小値が一つとは限らない 関数の最小化 • どうしようもない (厳密に言えば、「無条件に正しい答えを見つける 方法は存在しない」)ので、 • さっきの分類問題のように、凸関数などで近似する •
最小値という保証なしに解く • 基本的には、トライ&エラー いろんな場所に動いてみる • いろんな場所にトライすると、未知の 最小値を見つけられる可能性は 高まる一方、計算時間も増える • 「焼きなまし法」などが有名 極小値は3つ 左に行ったらいいとは 計算機には一目ではわからない
59.
7. まとめ
60.
まとめ • 「関数の最小化」の特徴を知っておくと 機械学習などの問題を解くのに役立つ。 • 関数を立てたら、それが最小化しやすい関数なのか 判断することで、どんな実装にするかの方針が立つ。 特に以下が大事。 •
「極小値が1つであるか否か」 • 「1つであるならば、それは凸関数か」 • 時には解けることを最優先に、厳密さを失ってでも 凸関数に置き換えたりする。機械学習でもよくある。
Download