#数楽

この手の「下からの評価」や「上からの評価」は非常に基本的。

30以上を示せだと簡単ですが、次の問題なら「良い問題」かも。

問題: ∫_2^4 x^x dx > 100 を証明せよ。e > 2.7 と log 3 < 1.1 を既知としてよい。

真の問題: 既知とすると良い事実でシンプルなものは他に何があるか?
#数楽

∫_2^4 x^x dx = 111.2851854… らしいです。

wolframalpha.com/input/?i=%E2%8… Image
#数楽

既知とするのは、

e > 2.7, log 2 < 0.7, log 3 < 1.1

の3つにしておいた方が選択肢が増えてよかったかな。

選択肢が増えた方が楽しい。
#数楽 私の解答例だと、log 3 < 1.1 を使う方法では e < 2.7 の 2.7 と 3 の相性が良いおかげで手計算が少し楽になる。 log 4 < 1.4 を使う方法の方が精度は高くて、105より大きいことを示せる。

すでにノートのスクショを撮ってあるが、ネタバレが早すぎるのはよくないので、まだ公開しない。
#数楽 2つの函数のグラフの比較は

wolframalpha.com/input/?i=plot%…

のようにWolframAlphaを使うと便利です。 Image
#数楽

e > 2.7, log 2 < 0.7, log 3 < 1.1 を使えば

    ∫_2^4 x^x dx > 108 + 34/567

を示せますね。
#数楽 資料 ImageImageImage
#数楽

計算がちょー楽でいいです! log 2 < 0.7 と log 3 < 1.1 の両方を使えば

    ∫_2^4 x^x dx > 106 + 31/84

を示せますね。

ちなみに、私の方法だと、e > 2.7, log 2 < 0.7, log 3 < 1.1 の3つを使って

    ∫_2^4 x^x dx > 108 + 34/567

を示せています。 ImageImage
#数楽

これ e > 2.7 と log 3 < 1.1 の2つを使う方法として私と同じ!

急激に増大する函数は対数を取った結果を近似した方がお得なことが多い。

さらにこの方法を log 2 < 0.7 も使って自明な改良をすると 108 より大きいことも示せる。
#数楽 まだ110より大きいことをコンパクトな悪くない準備だけで示す方法は見付けていないです。(108より大きいことは、e > 2.7, log 2 < 0.7, log 3 < 1.1 を準備すれば容易に示せるところまで考えて、そこから先はあんまり考えていない。)

あと上からの評価もあった方がよい。
#数楽 正直に白状すると、この手の評価について、大学新入生くらいのときにはかなりサボっていた。大学入試問題の延長の人為的で特殊な問題のような気がしてやりたくないと思っていた。

この手の具体的な近似について、経験を積んでおくことは、視界を広げるためには結構大事なことだと思います。
#数楽

h が小さいときの (1 + h)^{1/h} の近似も対数を取った結果 (1/h)log(1+h) を近似してから、expを取ると簡単です。

(1 + h)^{1/h} が e で近似できることは高校で教えている。

実用的にはそれだけでは足りなくて、誤差の大雑把な評価が必要になる。 Image
#数楽 n! の近似式で有名なのはスターリングの公式。

log n! に関するBinetの公式については

log n! = ζ_s(0, n+1) + log√(2π)

(ζ_s(s, x)はフルヴィッツのゼータ函数の偏導函数)

を使った驚くべき証明がある。

階乗は対数を取った途端にゼータ函数と関係する。

nbviewer.jupyter.org/github/genkuro…
#数楽 x^x の対数として出て来る x log x は下に凸な函数として有名でShannon情報量(エントロピー)との関連でよく出て来ます。

x log x が出てき易い理由の1つが実は、スターリングの公式

log x! = x log x - x + (1/2)log x + log√(2π) + …

です。これのトップ項として x log x が出てき易い。
#数楽 n! を n^n で「近似」すると「誤差」が大き過ぎるように感じられるのですが、

log n! を n log n で「近似」した場合の相対誤差は大したことがありません。

x^x について知ることは x! の主要因子について知ることでもあり、決して人為的で特別過ぎる問題にはなりません。
#数楽 x log x が下に凸な函数であることへのJensenの不等式の適用によって、KL情報量に関するGibbsの情報不等式を一瞬で証明できます: f(x) = x log x と確率密度函数p(x),q(x)について、

∫f(q(x)/p(x))p(x)dx
≧f(∫q(x)/p(x)×p(x)dx) = f(∫q(x)dx) = f(1) = 0.

最初の≧はJensenの不等式より。
#数楽 コンパクトRiemann面上のsymbolに関する相互法則はtame symbolやContou-Carrere symbolの対数が積分表示を持つことを使えば、易しい複素解析で理解できる。(純代数でも証明できるが)

genkuroki.github.io/documents/2016…
コンパクト Riemann 面に関する相互法則
#数楽 x^x = e^{x log x} という式を見た瞬間に想起されることは膨大にあって、すべてを言葉にすることは難しい。
#数楽

f(x) = x log x と確率密度函数p(x), q(x)に対する

D(q||p) = ∫f(q(x)/p(x))p(x)dx = ∫q(x)log(q(x)/p(x))dx

や、非負で総和が1のpᵢ, qᵢに対する

D(q||p) = Σf(qᵢ/pᵢ)pᵢ = Σqᵢ log(qᵢ/pᵢ)

をKullback-Leibler情報量と呼ぶ。これらが0以上になることが「Gibbsの情報不等式」。
#数楽 KL情報量の資料

genkuroki.github.io/documents/2016…
Kullback-Leibler 情報量と Sanov の定理

nbviewer.jupyter.org/github/genkuro…
11 Kullback-Leibler情報量 (#Julia言語)

二項分布や多項分布の中心極限定理のスターリングの公式による証明はKL情報量のSanovの定理を経由した方が計算の見通しがよい。
統計学における確率論の「三種の神器」は

* 大数の法則
* 中心極限定理
* KL情報量のSanovの定理(および大偏差原理一般)

なのですが、赤池弘次さんは日本人だったのに、KL情報量のSanovの定理は全然普及していない。いわゆる赤池情報量基準の基礎がKL情報量です。
#数楽 例えば、未知の真の確率はqなのに、それをpだと推測したときの誤差の有力な定義の仕方の1つはKL情報量

D((q, 1-q)||(p, 1-p)) = q log(q/p) + (1-q)log((1-q)/(1-p))

で誤差を定義することです。

実際にそのように定義した誤差の大きさに応じて罰金を払うミニマックスゲームの話↓
#数楽 q log(q/p) 型の式はPoisson分布の確率の対数(またしても対数!)にスターリングの公式を使えば自然に出て来ます。

-log(e⁻ᵃ a^k/k!)
= log k! - k log a + a
= k log k - k + o(k) - k log a + a
= k log(k/a) - (k-a) + (1/2)log k + o(k).

最初の項k log(k/a)からKL情報量が出て来る。

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with 黒木玄 Gen Kuroki

黒木玄 Gen Kuroki Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @genkuroki

18 Feb
#数楽 #統計 以下のようなゲームを2人で行う。

①k=0,1,2,…,10に対応する11個の数p_k達の表を作って互いに交換する。

各p_kは「10回中k回成功」というデータが得られたときの真の成功確率qの推定値とみなされるので、0以上1以下の実数であるとする。

例えば、最尤推定ならp_k=k/10となる。続く
#数楽

②相手の推定法の数表を受け取った2人は、その推定法が失敗しそうな真の成功確率qを選んでコンピュータに入力する。

qの選択では次の③のステップに配慮することが重要である。例えば、受け取った数表が

0.05, 0.1, 0.2, …, 0.9, 0.95

の場合には、q=0.43とするのがほぼベストになる。続く
#数楽

③コンピュータは、成功確率qの10回のベルヌーイ試行での成功回数kに関するKL(q, p_k)を1000回分足し上げ、得られた数値×1万円を推定法p_kに対する罰金の金額とする。ここで

KL(q, p) = q log(q/p) + (1-q)log((1-q)/(1-p))

はKL情報量である。KL(q, p)≥0で等号とp=qは同値。

続く
Read 24 tweets
17 Feb
尤度函数を最大化することに必然性はないです。実際、比較基準を明確にしたとき、最尤法は最良の方法にならないことが多いです。

モデルを固定して、正則性などの条件を仮定して、サンプルサイズ→∞とすれば(非現実的!)、最尤法によってモデル内で可能な最良の結果が得られることは証明できます。
尤度の定義は「モデル内でデータと同じ数値が生成される確率または確率密度」であり、「モデルのデータへの適合度」の指標にはなりますが、「もっともらしさ」ではないし、「最大化するべき量」でもありません。

最尤法以外にも沢山の方法があり、条件を変えるごとにどれが良い方法であるかは変わる。
ダメな考え方:尤度は英語でlikelihoodであり、もっともらしさを表す。最尤推定はもっともらしさを最大化する推定法である。得られたデータと同じ数値が生成される確率を最大化することは非常にもっともらしい推定法だろう。

↑非論理的な考え方の典型例

最尤法は沢山ある方法の中の1つにすぎない。
Read 4 tweets
17 Feb
#統計 統計学関連の文献で、「不偏」(unbiased)という条件を付けて「〇〇法が最良」というようなことを述べる行為が普通に行われていますが、不偏性は数学的にものすごく強い制限で、その制限の中で「最良」と言われても、「どうせ、井の中の蛙だろ?」という印象がどうしても出て来てしまう。
#統計 不偏性(unbiasedness)の条件は座標依存なので、座標をちょっと変えただけで維持されなくなってしまう。

例えば、統計学入門で習う不偏分散は真の分散の不偏推定量になっているのですが、不偏分散の平方根は真の標準偏差の不偏推定量にはなっていません。
#統計 不偏性はおそろしく強い数学的条件であり、実用的には問題がない小さな不偏性の崩れを許容した方が良い場合の方が多いと思う。

不偏性を仮定すると数学的に強い結果を出し易いのですが、「実用的には不偏性の条件の維持にこだわることは不合理である」と正直に言うべきだと思う。
Read 5 tweets
17 Feb
#Julia言語 私が自分の勉強用に作ったパッケージ

github.com/genkuroki/Meta…
MetaUtils.jl
↓使い方
nbviewer.jupyter.org/github/genkuro…

添付画像1:print_tree(AbstractMatrix)←これの出力結果を見れば、Juliaが多彩な行列の型を持っていることが分かる。他の事柄についても同様。ジャングル的な複雑さ。 ImageImage
#Julia言語

print_tree(Number), print_tree(AbstractVector) の結果

行列だけではなく、数やベクトルの型も沢山ある。

パッケージを読み込むとこれらの内容がさらに増える。

型の継承がツリー型階層構造に限ることが原因で生じる設計上の困難は Holy traits を使えば解消される。 ImageImage
#Julia言語 数の型ぐらいは全部覚えられても、ベクトルや行列の型はとても覚え切れない。そういう複雑な型の世界の構築はベクトルや行列の効率的な計算に必要。

しかし、一般ユーザー側はベクトルや行列の型を無理に覚えることなく、効率的な計算が可能である。そういうユーザーフレンドリーな設計。 ImageImageImage
Read 6 tweets
16 Feb
楽な方法で高速に計算できたらうれしい人達は潜在的に非常に沢山いるはずで、Python + NumPy とか、R + Stan のような組み合わせは潜在的な需要に応える道具だったので広く普及したのだと思います。

そして、Juliaがやって来た。
Juliaが掘り起こしそうな潜在需要は、プログラミングの素人がC, C++, Fortranで書かれたライブラリ並の計算速度を持つパッケージの開発者側に回ること。

プログラミングが素人の各分野の専門家が、自分の専門に役に立つ高速計算の道具を自分で作って配布したいという欲望を持つ場合は少なくないはず。
欲望はあっても、C, C++, Fortranでライブラリを書いて、PythonやRで使えるようにするというようなことはやる気になれないのでやらないということになりがちだと思う。

JuliaをマスターしていればJuliaだけで高速計算できるパッケージを作れます。
Read 4 tweets
16 Feb
#数楽 #Julia言語

gist.github.com/genkuroki/5be2…
ランダム直交行列

①固有値の偏角の分布は一様分布っぽくなる。n=2000
②しかし同じn=2000の一様分布のサンプルとは様子がだいぶ違う
③④bins=50のヒストグラムは一様分布のn=10^5のサンプルに近い感じ。 ImageImageImageImage
#Julia言語 #数楽

ランダムな直交行列はランダム行列のQR分解で生成している。

function rand_orthogonal(n)
Q, R = qr(randn(n, n))
Q * diagm(sign.(diag(R)))
end

単にQを使うと失敗する。
#Julia言語 #数楽

n=200のランダム直交行列の固有値の分布(左)と円周上の一様分布のサンプル(右)の比較。

偏角のヒストグラムを見ると、ランダム直交行列の固有値達はほぼ等間隔に並んでいることがわかる。 Image
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!