確率ロボティクスの式変形の行間解説
geforce搭載PCにubuntuいれようとして苦戦した話
何度やってもトラブル起こしますねこいつは・・・。
詳細はあとで追記するとして、とりあえず作業メモを・・・。
この記事で解決されるかもしれない症状
a. USBメモリから起動できない
b. セキュアブートを変更するけどええか?と聞かれ、設定してもいないパスワードを要求されどうしようもなくなる
c. ドライバのインストールを実行後、nvidia-smiを実行すると
Make sure that the latest NVIDIA driver is installed and running.
などと表示され正常にコマンドが終了しない
d. nvidia-smiはちゃんと通るけど、ログインすると背景しか表示されない状態になる(マウスカーソルは出るし右クリックはできる)
モチベーション
ゲーム用に持ってるwindows10機のハードウェアを活かして機械学習用のubuntu機を作りたいが、ゲーム用のwindows10環境は一切変更したくない
方針
SSDを1つ増設し、まっさらなSSDにubuntuをインストールする。
ubuntu入りのディスクとwindows10入りのディスクはBIOSから起動ドライブの優先順位を変更することで切り替える。
ハードウェア構成
マザボ:H110M4-M01
GPU:GeForce GTX 1070
投入するubuntu:Ubuntu 16.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team
手法
1. インストール用のライブUSBの作成
イメージは
Ubuntu 16.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team
ライブUSBは
Universal USB Installer 1.9.8.2 - ダウンロード
で作成。
2. ライブUSBからインストール(a. USBメモリから起動できないの解決法)
普通には起動しません・・・。
上記の記事の2を行うと起動します。
上記の記事の3をそのままやってもまともにインストールできませんでしたが・・・。
3. Linuxカーネルのアップデート(cの解決法)
ドライバインストールの前にカーネルのバージョンを上げる。
以下を実行するとカーネルのバージョンが上がる。
sudo apt install linux-generic-hwe-16.04
いくら以上が要求かどこかに書いてあると思うが、そのうち探す。
4. セキュアブートの無効(bの解決法)
ドライバのインストールをすると、セキュアブートをdisableにさせてくれと要求される。
そこで、mokutilを使って無効にする。
sudo apt-get install mokutil
sudo mokutil --disable-validation
ここでパスワードを設定することになる。
再起動すると、いつもと違う画面になるので、
change secure boot stateを選び、パスワードを入力する。
この際、めちゃくちゃわかりにくいんだが、
Enter password character 3
とかいう聞かれ方をする。
これは、「パスワードの頭から数えて3文字目の文字を入力しろ」ということです。
あとは画面に従えばいいと思う。
5. ドライバのインストール
まず、インストール前に、(たぶん苦労した末にできたであろう)あらかじめインストールされてるドライバを削除する
sudo apt-get --purge remove nvidia-*
その後は
UbuntuにNVIDIAドライバを入れる手順 - Qiita
の3の手順を実行する。
nvidia-smiが成功した人、おめでとう!
失敗した人、力になれなくてすまんな・・・。
6.(オマケ) ログインしたけど背景(壁紙)だけしか表示されないんだけど・・・
compizの設定がぶっ壊れてるっぽい。これをためそう
ベイズ統計からみた頻度主義的検定手法
主旨
ベイズ統計と頻度主義でやってる検定ってどういう関係があるの?
という疑問について考えてみる。
議論
ベイズ統計では以下のように分布を取り扱う事が多い。
サンプリングされたデータを用いて次にとれるデータがどの程度の確率でどの値になるか予測したい。
この問題はデータがどのような確率分布に従うか推定する問題であり
予めパラメトリックな確率モデルが想定できるなら、 確率モデルのパラメータを求める問題になる。
例えばデータが正規分布に従うと思われる場合、「次にとれるデータがどの程度の確率でどの値になるかの予測」は「今とれているデータを生成している正規分布の平均と分散はいくらと推定されるか」という問題になる。
話を具体的にするため、以下ではデータは正規分布に従うとする。
これを数式で表すと、2つの確率変数があって、
(はサンプリングされたデータ、は確率モデルを特徴づけるパラメータ、正規分布においては分散と平均)
次の事後分布を考える
言葉で書くと、今取れているというデータがある前提のもと、分散と平均がとなる確率を考える。
ベイズの定理より
は正規分布に従っている
は事前分布と呼ばれるもので、と同じ関数型になるように取ると便利である。(これを共役事前分布という)
例えば、のうち平均は既知で分散を推定したい場合、事前分布として逆ガンマ分布をとる。
そうすると上記の計算により事後分布が計算できて、未知なるデータに対するの推定が可能になる。
頻度主義的な検定の手法は、上記の方法で求めたを使って、別のデータセットで求めた平均・分散がどの程度の確率密度をもつかということを問題にしている。
例えば、別のデータセットが異なる分散をもつという仮説を検定(これをするときは、を異なるデータセットから得られた分散以上の領域で積分して、有意水準を超えれば仮説は採択される。
ideapad 710S Plus-13IKBにubuntu 16.04LTSをインストールした話
やりたいこと
手持ちのノートPC(ideapad 710S Plus-13IKB)にubuntuをインストールしたい
注意
この作業を行うとwindowsが立ち上がらなくなる
逆の操作を行うと修復できる可能性はありますが未確認です
データが無事かも不明
結論
・linuxはSATAコントローラーをRAIDモードからAHCIモードに変更して使う必要がある
・ideapad 710S Plus-13IKBにデフォルトで入っているBIOSではこの操作ができない
・BIOSのアップデートを行うとAHCIに変更できるようになる(BIOSは下記から入手)
laptops and netbooks :: 700 series :: 710s plus 13ikb - JP
・BIOSのアップデートを行ったあとは通常の手順でインストールできる
やったこと
まずは一般的な手順を試した。
当初はデュアルブートにしたかったので下記の記事を参考に作業した
USBからubuntuを起動しインストールを進めようとすると、インストール先にあけておいたSSDの未割り当て領域が表示されない。
それどころか一切のドライブが表示されない。
ターミナルからfdisk -lすると、USBメモリは見えているが、内蔵のSSDは見えていない状況
ドライブが認識されない問題はググると「ちゃんとmountしないとだめだよ」という話が出てくるが、fdisk -lで見えないならubuntuからは「そもそも物理的に接続できていませんよ」ということと同じだろう。
この時点でハードウェア固有の問題かなと思ったので「ideapad linux」とかでググってレノボのフォーラムから情報を集めることにした。
するとこんな記事がでてきた
https://forums.lenovo.com/t5/Linux-Discussion/ideapad-710s-and-Linux/td-p/3358780
ideapad 710sにデフォルトで入っているBIOSはAHCIモードに非対応でlinuxのインストールはできないという話。
Solutionに飛ぶとLinux用のBIOSが一部提供されている。
ただし、注意して見ると710S Plus-13ISKと710S-13IKBと710S-13ISKのBIOSは提供の意思があるようだが、710S Plus-13IKBのBIOSはないようだ。
これに関してさらに調べると
No Linux BIOS for ideapad 710S "Plus-13IKB"
やはり同じ問題を抱えている人がいるようだ。
Solutionに飛ぶと"Why not purchasing laptop from other vendor?"という大変ハートウォーミングな提案がなされている。
この時点で一度諦めて電器屋に向かったんですが・・・
よくよく先を見てみると
New bios works GREAT!!!
とか書いてある。
(注意:ここから先の作業を行うとwindowsが立ち上がらなくなる可能性がありますのでよく考えてから進んでください)
そこでBIOSのアップデートを行った。
laptops and netbooks :: 700 series :: 710s plus 13ikb - JP
ここから入手できるBIOSを導入
BIOSのアップデートができたらBIOS画面に入りSATA controler modeをRAIDからAHCIに変更する
変更しようとすると、なんか恐ろしいことを英語で聞かれるが、強い覚悟でyesを選択する。
その他は下記の記事の「3.ubuntuの起動」からの内容と同じ作業です。
これでちゃんと内蔵のSSDがubuntuから見えるようになっているはず。
思い返してみると、こういうトラブル対応の記事は日本語の記事より英語の記事のほうが圧倒的に有用な確率が高いように思える。
Yahoo知恵袋とか質問とお説教しか書いてなくて邪魔でしかない。
推定誤差分散が最小になる推定方法とフィッシャー情報量
おおもとの疑問
未知の値に対して、ランダムな誤差が含まれるのを避けられない測定を何度か行い推定するとき
未知の値はどの程度正確に知ることができるのか?
その正確さを使って、測定が持っている情報量なるものを定義できないか?
正確な議論をするための定義と状況の簡略化
いま、未知の値を雑音がで表される互いに独立な正規分布に従う事がわかっている測定器で2回測定し以下の測定値を得たとする。
このとき、の線形結合をの推定値とすると、推定の誤差分散の期待値を最小にするをとったとき、その値はいくらになるか?
(実はこの問題は雑音の平均値がゼロで分散が有限なことさえ仮定すれば解けるが、あとでフィッシャー情報量を計算するために正規分布を仮定した)
計算
=
= なので
= なので
= を消去して
=
これが最小になるを求めるには、で微分して0とすればいいので
このとき
これで第一の疑問「未知の値はどの程度正確に知ることができるのか?」についての答えとして
分散の最小値を ととるようにできる。という知見を得ることができた。
情報量なる抽象的な概念をこのように、「その測定によって、どれだけ正確な推定ができるか」で定義しよう!
・・・というのがフィッシャー情報量である。
誤差分散に対して次のクラメールラオの不等式が成立することが知られている
は測定値全体をまとめたベクトル
は条件付き確率密度分布に対する期待値を取ることを意味する。
この不等式の右辺は、今回の問題のように平均値、分散などを仮定しない一般化した形をしている。
右辺の逆数がフィッシャー情報量と呼ばれる量である。
今回の問題に挙げた例を使って、実際に右辺の値を計算してみる。
(は独立)
はによらない量。あまり興味がない
同様の計算をにも行うことができる。
また、[(y-\theta )]の奇数次の期待値はゼロなので残るのは
確かにフィッシャー情報量の逆数と推定誤差分散の最小値は一致した。
このような計算を一般化して行った結果がクラメールラオの不等式を考えることができる。
参考
エッジにあるマイコンボードにPCから命令を送る
はじめに
この記事には目的の動作をさせたコードは書いていません。
目的の動作をさせたコードは他人のものです。
私が使ったコードは文中のリンク先を参照ください。
この記事は、そのコードがなぜこう書かれているのか自分なりに考えたお気持ちの表明です。
モチベーション
現場で走り回るロボットなりロボアームなりには一定の処理能力があるが
例えば機械学習みたいな重い計算を走らせることは難しかったりする。
また、機械学習は機械学習でpythonなりで書くとして、ロボット・ロボアーム上で同じコードを走らせる環境を作れるとは限らない。
なので、ハードの制御(サーボモータの制御など)はエッジのマイコンボードに任せて制御の目標値をPCから命令できる状況にしておくと良さそう。
やること
話を単純化して、
「PCから命令を送り、arduinoに接続されたLEDをキーボード操作で自由に点滅させる」
という問題を解く
答え
恥ずかしげもなく他人のQiitaを貼ります・・・・。
やってることは超シンプルだしね。
計測機器との通信と何が違うか?
我々実験系物理屋はLabVIEWなりで計測機器にアクセスしてセンサーの値を取得したり
電流源にアクセスして所望の電流を流して試料の温度をPID制御で安定化させたりしていたと思う。
その時、僕らがやっていたのは以下のようなことだと思う
「あの装置に命令を送りたいからあの装置のマニュアルをみよう」
↓
「マニュアルには『この文字列を送ったあとにlistenすると値が取れるよ』と書いてある」
↓
「なのでGPIBなりで計測機器に文字列を送信しよう」
こういう思考になれきっていた私は
「arduinoの端子から電圧を出力させる命令はどういう名前なんだろう」
と考えてしまった。
なんのことはない、arduinoはその「電圧を出力させる命令」を自分で定義しなきゃいけないのだ。
arduino側のプログラミングが必要なのはそういう理由である。
計測機器の場合は普通機器側のソフトはいじくれないので、あらかじめメーカー側で決まった命令を調べて実行することになる。
この点が大きく違うところで、マイコンボードは自由度があってよさだなあと思いました。
毎度毎度マニュアルひっくり返して命令語探すのだるいんですわ・・・。
カルバックライブラ距離・・・?得体が知れないので正規分布で具体例を作ってみる
カルバックライブラ距離とは
をを確率変数とする確率分布として以下の式で定義される
カルバックライブラ距離は常に非負で、ゼロになる時は
のときに限るという性質があります。
※距離の公理は満たさないので、本当は距離と呼ぶべきじゃないかもしれませんが、あえて距離と呼びます。数学的な術語としての「距離」の意味はないです。
ものの本によれば、
「真の分布を、推測の結果をとすると、カルバックライブラ距離が小さいようなを持ってくることで真の分布に近い推測が得られるだろう」
とのこと。
カルバックライブラ距離を持ってくるモチベーションが全然わからん・・・。
正規分布で具体的に計算してみれば何がやりたいかつかめないかな?
ということで計算してみる。
もも正規分布にしちゃう。
このとき、カルバックライブラ距離は
第1項は2つの分布の分散で決まる項
第2項はこれ、実は定数ですね。(あとで第3項の計算をしたあとで、とするとわかる)
それと3つめ、相手のを使って「分散」を計算する項が出てきた。
第3項をもう少し変形する
第1項は正規分布から分散を計算するいつものあの変換で計算できる
第2項はの変換をすると被積分関数が奇関数になるのでゼロ
第3項はなので簡単に計算できる
結局
まとめると
結論:やっぱりわからん。
計算間違った・・・?(一応ならゼロだが・・・)