Uncategorized」カテゴリーアーカイブ

Cholesky分解を求める計算量 (機械学習のためのカーネル6.1節)

正定値対称行列$A\in {\mathbb R}^{n\times n}$に対して、$A=RR^\top$なる下三角行列$R\in {\mathbb R}^{n\times n}$が存在します(この証明は省略します)。成分で書くと
$$ A_{ji}=\sum_{h=1}^nR_{jh}R_{ih},\hspace{5mm}i,j=1,\ldots,n$$ が成立します。最初に$R_{ij}$, $i,j=1,\ldots,n$ をすべて0にしてから、各$i=1,\ldots,n$で
1. $R_{ii}=\sqrt{A_{ii}-\sum_{h=1}^{i-1}R_{ih}^2}$
2. $R_{ji}=(A_{ji}-\sum_{h=1}^{i-1}R_{jh}R_{ih})/R_{ii}$, $\hspace{3mm}j=i+1,\ldots,n$
によって、$R$の第$i$列が求まります。2.は$(n-i)^2$回の演算(乗算)が必要で、全体で
$$\sum_{i=1}^n(n-i)^2=\sum_{j=0}^{n-1}j^2=\frac{1}{6}(n-1)n(2(n-1)-1)=\frac{n^3}{3}(1-\frac{1}{n})(1-\frac{1}{2n})$$回、高々$n^3/3$の演算が必要です。他方、$A,B\in {\mathbb R}^{n\times n}$の乗算は、その第$i,j$成分が$\sum_{h=1}^n A_{ih}B_{hj}$によって得られ、この操作を$n^2$個の成分すべてに対して行うので、$n^3$回の演算が必要です。$A$の逆行列を求める操作も同様の時間を要します。

計算量のオーダー表現は、定数倍の差異を除いて考えるので、上記すべて$O(n^3)$という表記が本来ですが、機械学習のためのカーネル6.1節では、$O(n^3/3)$, $O(n^3)$というように両者を区別しています。

また、下三角行列$L\in {\mathbb R}^{n\times n}$とある定数ベクトル$b\in {\mathbb R}^{n}$があって、$Lx=b$なる$x$を求めるためには、$$x_i=(b_i-\sum_{h=1}^{i-1}L_{i,j}x_j)/L_{ii}$$を各$i=1,\ldots,n$に対して行う必要があり、高々$1+\ldots+(n-1)=n(n-1)/2$回の乗算が必要です。テキストではこれを$O(n^2)$の時間がかかるとしています。

YouTubeをはじめました。「ぜうちゃねる」にご登録を。いいねも歓迎です。

テキストにそった内容のYouTube動画を作成しています。パワーポイントでスライドを作成し、Goodnoteを用いて書きながら丁寧に説明しています。各節につき1動画になっています。2024年3月の段階ではまだ第1章のみですが、2024年4月中には、統計的機械学習の数理のすべての動画が完成することになっています。ゆっくり話しているので、上級者の方は速度を125%や150%にして見ていただければと思います。

100問の解答を掲載しました。

「解答がほしい」というご要望があることは承知していました。ただ、勤務している学生(学部3年後期)が提出する演習問題にもなっていたこととがネックになっていました。解答がなくても本文を読めばわかる問題ばかりだという意識がありました。

今回、下記に関して、数学とプログラミングに関して、略解と言いながらも詳しい解答を載せてみました。ご活用ください。

2024年中には、シリーズの既刊すべてについて、解答を作成する予定です。ご期待ください。

受賞の言葉(日本行動計量学会会報2023年12月号から抜粋)

このたびは,栄えある出版賞(杉山明子賞)をいただき,大変光栄に思います.日頃から、会員の皆様から励ましていただき、助けていただいているお陰だと思い、感謝しています。

受賞の対象となった「統計的機械学習の数理100問 with R」は、2017年に阪大の基礎工数理に異動になってからはじめた講義(3年後期)の内容を書籍にしたものです。3年間教えて、2020年3月に書籍にしました。線形回帰、分類、CV、ブートストラップ、情報量基準、スパース、決定来、サポートベクトルマシン、主成分分析、クラスタリングなどの項目を含みます。

RやPythonを使ったデータ分析や機械学習の書籍は、無数にあります。しかし、「統計的機械学習の数理100問with R」は、私の教育や研究のポリシーを如実に反映した独自性の強いものとなっています。パッケージにデータを入れて出力結果をみるような、いわゆる使い方に関する書籍が多いように思いますが、そういう勉強方法に強い問題意識を持っていました。

私は、ベイジアンネットワーク(BN)の研究を長くやっていて、BNの有償ソフトやbnlearnの出力結果の解釈について、質問を受けることよくあります。しかし、残念なことに、ほとんどの場合、使っている本人が、BNの動作をわかってなく、間違っていました。それだけならまだしも、(間違った利用方法で)都合のよい結果がでたときだけ、「BNを使って〇〇の結果が出ました」というような論文を書く人がかなりいます。一般のデータサイエンスや機械学習でも同じことが言えます。正直、パッケージにデータを放りこむだけなら、小学生でもできると思っています。

ここで、そうした処理の多くは、プログラムだけでなく、数学で記述できます。「統計的機械学習の数理100問with R」は、数学の各段階をソースコードで正確に書いて、動作を確認しています。このようにすると、自然と数学的なロジックもついてきて、データサイエンスに必要な本質を見る姿勢ができてきます。業務でパッケージを用いることは否定しません。しかし、勉強の段階では、ブラックボックスにしないで、動作を確認すべきです。そして、正しい結論を世の中に提供するという本来の使命を果たすべきだと思っています。

「統計的機械学習の数理100問 with R」は、「機械学習の数理100問シリーズ」という共立出版から出している書籍の1つで、「スパース推定100問 with R」「機械学習のためのカーネル 100問 with R」とそれらのPython版、最近では「渡辺澄夫ベイズ理論 with R」など合計で7冊出しています。定年までの2年数ヶ月であと5冊完成させる予定です。以前は、BNの他に情報理論、代数幾何を用いた暗号などを手掛けていましたが、2017年に現在の職についてから、データサイエンスの種々のテーマを希望する学生が多くいることがわかり、それまでのやり方(守備範囲が狭すぎる)ではやっていけないと思い、自分の勉強のためもあってこのシリーズの執筆を始めました。

今回の受賞で、機械学習の数理100問シリーズを始めてよかったと実感しました。また、先日の行動計量シンポジウム「WAIC/WBICの理論と実装:渡辺澄夫ベイズ理論への招待」に多くの方(約170名)にご出席いただいき、むずかしそうに見える理論をわかりやすく伝えるという貢献をしていく必要があると思いました。さらなる努力を続けていきたいと思っています。皆様、今後ともよろしくお願いします。

鈴木 讓 (すずき・じょう)
大阪大学大学院基礎工学研究科教授
早稲田大学理工学部卒.早稲田大学大学院修了、博士(工学)。早稲田大学助手,青山学院大学助手を経て,1994年に大阪大学講師に着任。理学研究科准教授を経て、2017年より現職.この間,Stanford大学(1995-1997),Yale大学(2001-2002)の客員研究員。日本行動計量学会 理事(2018-)、運営委員会委員長(2018-2021)。BehaviormetrikaのCoordinate Editor。

講義の学生がglmnet for Pythonを動かす環境を作成してくれました。

スパース推定のglmnetは、PythonだとCentOSRでないとが動かないので、悩んでいました。講義は、Rの学生とPythonの学生がいるので。dockerで動作する環境を、受講する学生の一人が作成してくれました。windowsでも動きます。

https://github.com/oriki101/sparse_estimation_docker