読者です 読者をやめる 読者になる 読者になる

オリジナリティについて

雑感

いろいろあって久しぶりのブログ更新になりましたが、今回のエントリーはいつもと違った内容にしたいと思います。

僕がはてなブログを始めたのが去年の10月なので現時点で約4か月間続けていることになります。

ありがたいことにページビューも増えてきました。

ここでページビュー数上位のページを紹介したいと思います。

CentOS6.8にChromeを入れようとしたらgccをビルドすることになった - k's diary

  • 5位

TeXで数式をはてなブログに表示して、Atomでプレビュー - k's diary

順位の横の数字がページビュー数でカッコ内が割合です。

ちなみにGoogle Analyticsを使って調べた数字です。

次にGoogle Search Consoleで調べた検索クエリの解析結果です。 f:id:beback:20170221123414p:plain

やっぱり検索サイトで上位に表示されるとページビュー数が増える傾向にあるようです。

1位のページは忘備録的に書いただけで僕自身はEclipseをあまり使いこなせていないのでこんなページを参考にしちゃっていいのかなって感じです。

このブログ全体にいえるこでもありますが、1・2・5位はググって調べたことを自分向けにまとめています。

3位はトラブル解決につながった人はいるのでしょうか?ほとんどいないと思うのですが…

今までも考えていたことではありますが、この結果を見て感じたことはもっとオリジナリティのあるコンテンツを提供したいということです。

一応このブログは日記という形でやっているつもりなので検索エンジンから飛んできた人が多いというのも悪くない傾向だとは思います。

ですが、現時点でこのブログの内容は他のサイトでも見つかる内容ばかりです。そう考えるとオリジナリティがないと言えると思います。

最近のWebは中身の無いサイトやコピペサイトがたくさんありうんざりしているのですが、その一部にはならないようにしたいです。

久しぶりに文章を書いたら疲れました。作文能力がかなり低下しているようです。

TeXで数式をはてなブログに表示して、Atomでプレビュー

LaTeX Math 環境設定

はてなブログの設定

[デザイン]>[カスタマイズ]で設定画面を開き、[記事]>[記事下]と[フッタ]に以下のhtmlを挿入する。

<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      displayMath: [ ['$$','$$'], ["\\[","\\]"] ]
    }
  });
</script>

これで$または\(で囲めばMathJaxを利用してTeXを表示できます。

また、中央揃えのときは$$または\[です。

Atomの設定

  1. markdown-preview-plusをインストール

  2. 既存のmarkdown-previewを無効化

  3. markdown-preview-plusのSettingsからEnable Math Rendering By Defaultにチェックを入れる

これでctrl+shift+MTeXMarkdownがプレビューできるようになりました。

感想

ブログをずっとはてなブログで書き続けるという方やライトに書きたい方は[tex:]を使って数式を書いてもいいのですが、他のブログへ引っ越す可能性があったり、Markdownエディタでブログを書こうとしている場合は今回の方法を使った方がいいと思います。自分はブラウザで長い数式を書くのが苦痛だったのでこの方法をとることにしました。

PRML 1章 解答

Math 機械学習

PRMLの演習問題の解答を書いてみることにしました。
数学の知識は数Ⅲ、Cレベルまでしかないので正確性は求めないでください。あくまで、理解できればいいということで。
もちろんすべての解答を書くとは限りません。
当面は基本問題中心で...

1.5

期待値の公式を使って計算します。 公式はこちらにまとまっています。

期待値と分散に関する公式一覧 | 高校数学の美しい物語


var[f] = E[(f(x) - E[f(x)])^{2}]

2乗を展開して、期待値の中身を分解する


= E[f(x)^{2}] - E[2f(x)E[f(x)] + E[f(x)]^{2}

ここで E[f(x)]を定数と考えると


= E[f(x)^{2}] - E[f(x)]E[2f(x)] + E[f(x)]^{2}


= E[f(x)^{2}] - 2E[f(x)]^{2} + E[f(x)]^{2}


= E[f(x)]^{2} - E[f(x)^{2}]

1.6

共分散の定義は


cov[x,y] = E_{x,y}[\{x - E[x]\}\{y - E[y]\}]

であり、展開すると
(E[x], E[y]は定数であるので公式E[x+a] = E[x] + aを使った)


E_{x,y}[\{x - E[x]\}\{y - E[y]\}] = E_{x,y}[xy] - E_{x,y}[yE[x]] - E_{x,y}[xE[y]] + E[x]E[y]

x,yは独立なので(E[xy] = E[x]E[y]が成り立つ)、また1.5と同様にE[x], E[y]は定数であり、


= E_{x,y}[x]E_{x,y}[y] - E[x]E_{x,y}[y] - E[y]E_{x,y}[x] + E[x]E[y]

因数分解すると


= (E_{x,y}[x] - E[x])(E_{x,y}[y] - E[y])

ここで期待値の定義より


E_{x,y}[x] - E[x] = \int\int p(x,y)xdxdy - \int p(x)xdx

x,yは独立なのでp(x,y) = p(x)p(y)が成り立つので


= \int p(x)xdx \int p(y)dy - \int p(x)xdx

p(y)は確率密度なので \int p(y)dy = 1であるから


= \int p(x)xdx - \int p(x)xdx = 0

よって


E_{x,y}[\{x - E[x]\}\{y - E[y]\}] = 0

1.11


\displaystyle \ln{p({\sf x}|\mu,\sigma)} = -\frac{1}{2\sigma^{2}}\sum_{n=1}^{N}(x_n-\mu)^{2} - \frac{N}{2}\ln{\sigma^{2}} - \frac{N}{2}\ln{(2\pi)}

ここで


\displaystyle \frac{1}{2\sigma^{2}}\sum_{n=1}^{N}(x_n-\mu)^{2} = \frac{1}{2\sigma^{2}}\sum_{n=1}^{N}(x_n^{2} - 2\mu x_n + \mu^{2})


\displaystyle \frac{1}{2\sigma^{2}}\sum_{n=1}^{N}x_n^{2} + \frac{\mu}{\sigma^{2}}\sum_{n=1}^{N}x_n - \frac{N\mu^{2}}{2\sigma^{2}}

よって対数尤度関数を\mu微分すると0になるので


\displaystyle \frac{d\ln{p({\sf x}|\mu,\sigma^{2})}}{d\mu} = \frac{1}{\sigma^{2}}{\sum_{n=1}^{N}x_n} - \frac{N\mu}{\sigma^{2}} = 0

よって


\displaystyle N\mu = \sum_{n=1}^{N}x_n


\displaystyle \mu = \frac{1}{N}\sum_{n=1}^{N}x_n

1.55が示された

\sigma^{2}が最大になるとき、対数尤度関数を\sigma^{2}微分すると0になるので


\displaystyle \frac{d\ln{p({\sf x}|\mu,\sigma^{2})}}{d\sigma^{2}} = \frac{1}{2(\sigma^{2})^{2}}\sum_{n=1}^{N}(x_n-\mu)^{2} - \frac{N}{2\sigma^{2}} = 0

両辺に2(\sigma^{2})^{2}を掛けて


\displaystyle N\sigma^{2} = \sum_{n=1}^{N}(x_n - \mu) ^ {2}

よって


\displaystyle \sigma^{2} = \frac{1}{N}\sum_{n=1}^{N}(x_n - \mu) ^ {2}

1.56が示された

1.12

テキストに書かれている通り最尤解(\mu_{ML},\sigma_{ML}^{2})はx_1,...x_Nの関数であることに注意する。 n = mのとき1.50より


E[x_nx_m] = E[x_n^{2}] = \mu^{2} + \sigma^{2}

I_{nm} = 1なので

E[x_nx_m] = \mu^{2} + I_{nm}\sigma^{2}

n \neq mのときx_nとx_mは独立なのと、1.49より


E[x_nx_m] = E[x_n]E[x_m] = \mu^{2}

I_{nm} = 0なので

E[x_nx_m] = \mu^{2} + I_{nm}\sigma^{2}

(1.130)が示された。また、


\displaystyle E[\mu_{ML}] = E[\frac{1}{N}\sum_{n=1}^{N}x_n]


\displaystyle = \frac{1}{N} \sum_{n=1}^{N} E[x_n]

E[x] = \muより

= \frac{1}{N} N\mu = \mu

よって1.57が示された。

また、


\displaystyle E[\sigma_{ML}^{2}] = E[\frac{1}{N} \sum_{n=1}^{N}(x_n - \mu_{ML})^{2}]


\displaystyle = \frac{1}{N} \sum_{n=1}^{N} E[(x_n - \mu_{ML})^{2}]


\displaystyle = \frac{1}{N} \sum_{n=1}^{N} E[x_n^{2} - 2x_n\mu_{ML} + \mu_{ML}^{2}]

ここで \displaystyle
E[x_n^{2} - 2x_n\mu_{ML} + \mu_{ML}^{2}] = E[x_n^{2}] - 2E[x_n\mu_{ML}] + E[\mu_{ML}^{2}] \tag{1}

(1)の第1項は


E[x_n^{2}] = \mu^{2} + \sigma^{2}

(1)の第2項は

\displaystyle
-2E[x_n\mu_{ML}] = -2E[x_n \frac{1}{N}\sum_{m=1}^{N}x_m]

\displaystyle
= -\frac{2}{N} \sum_{m=1}^{N} E[x_nx_m]

(1.130)より

\displaystyle
= -\frac{2}{N} \{(N-1)\mu^{2} + \mu^{2} + \sigma^{2}\}

\displaystyle
= -2\mu^{2} -\frac{2}{N} \sigma^{2}

(1)の第3項は

\displaystyle
E[\mu_{ML}^{2}] = E[(\frac{1}{N} \sum_{n=1}^{N}x_n)^{2}]

この変形が肝!

\displaystyle
= \frac{1}{N^{2}} \sum_{n=1}^{N} \sum_{m=1}^{N} E[x_nx_m]

(1.130)より

\displaystyle
= \frac{1}{N^{2}} \{N(\mu^{2} + \sigma^{2}) + (N^{2}-N)\mu^{2}\}

\displaystyle
= \frac{1}{N} (\mu^{2} + \sigma^{2} + N\mu^{2} - \mu^{2}) = \frac{\sigma^{2}}{N} + \mu^{2}

よって(1)は

\displaystyle
\sigma^{2} - \frac{1}{N}\sigma^{2} = (\frac{N-1}{N})\sigma^{2}

よって

\displaystyle
E[\sigma_{ML}^{2}] = \frac{1}{N} \sum_{n=1}^{N} (\frac{N-1}{N})\sigma^{2} = (\frac{N-1}{N})\sigma^{2}

これで1.58が示された。

参考

第1章 序論 - Google ドライブ

今年の目標

雑感

明けましておめでとうございます。新年ということで自分なりの今年の目標をまとめてみました。
これが1年で達成できるとなかなか立派なプログラマーになれそうですねえ。
まあ、6割以上は達成できるようになりたいです。

  1. アセンブリ言語をマスターする
    よりハードウェアに近いことを理解しようと思うと常にアセンブラにぶつかるのでそろそろ身に付けたい。 リバースエンジニアリングにも興味がある。

  2. C/C++を実用レベルまで習得する
    アセンブラに関連してC/C++で書かれたソースコードは多いし、基礎となる言語なので身に付けたい。

  3. ダンなWebサイトを作るのに必要な技術を身に付ける
    JavaScriptのライブラリやCSSなどを使えるようになりたい。
    Web界隈は非常に込み入っているイメージがあり、あまり手を付けたくなかったのだが、最近よく聞くElectronにはWeb技術が使われているようで、Webサイトに興味がなくても無視できない存在になっていると感じた。

  4. セキュリティについて勉強する(のに必要な知識を付ける)
    先日、セキュリティ関連の本を読んだところ、アセンブラやデバッガ、Linuxカーネルの話題などがありついていけなかった。
    幅広い知識が必要なのだと実感した。

  5. 効率的にプログラムを開発できるようにする
    すこし規模の大きなプログラムを作ろうとすると、設計が上手くいかなくなる。デザインパターンを勉強したい。 また、gitやIDEを使いこなせるようになりたい。

  6. 機械学習ディープラーニングについてアルゴリズムを理解し、実用できるようにする
    取り敢えず、PRMLとコード主体の機会学習の本を読む。

  7. 数学
    まともに大学で数学を勉強できないので、しばらくは独学で頑張るしかない。

  8. 英語
    プログラミングには直接関係ないけど。TOEIC750点、TOEFL550点ぐらい取れるようになりたい。

  9. アプリ開発
    自分で作ったアプリを公開してみたい。まずはUWPとAndroidで。
    iOS用にも作ってみたいがiPhoneMacもないから難しそう。(というか無理)
    最近、Xamarinを始めようとしている。C#にも手を出すことになるとは...

TeXで数式をはてなブログに表示する

LaTeX Math

(初期設定がやや面倒ですが[tex:]記法ではなくこちらの方がおすすめです。 1/11追加) stronger.hatenablog.com

数学のお勉強をちゃんとしようと思い、(おそらく)このブログにも書いていくことにした。

そのためには数式を書く必要があるのでTeXの書式について調べてみた。

以下の数式は機械学習において有名な本「パターン認識機械学習」(通称: PRML)に載っていたものです。

加法定理


\displaystyle p(X) = \sum_{Y} p(X, Y)

乗法定理


p(X, Y) = p(Y | X)p(X)

ベイズの定理


\displaystyle p(Y, X) = \frac{p(X | Y) p(Y)}{p(X)}

正則化した誤差関数


\displaystyle \tilde{E}(\mathrm{W}) = \frac{1}{2} \sum_{n = 1}^N \{ y(x_n, \mathrm{W}) - t_n\}^{2} + \frac{1}{2}||\mathrm{W}||^2

[tex:TeXのコマンド]で数式を表示する。

コマンド自体の使い方はhttp://www.latex-cmd.com/を参考にした。

\displaystyleを使うことで分数や総和が見やすくなる

最後の数式の中括弧は\\{とエスケープしないと表示されなかった(30分ぐらい悩んだ...)

恐らくMarkdown記法によるものではないかと思う。他のはてなブログでは表示されていたので。

(確認したところはてな記法では\{のように1回だけエスケープが必要だった。 12/20) 他にも]_などエスケープが必要なものがあります。うまく表示されないときは怪しい文字(MarkdownTeXのメタ文字)をエスケープするといいかもしれません。

以下がソースです。繰り返しになりますが、Markdownで書いています。

加法定理

[tex:
\displaystyle p(X) = \sum_{Y} p(X, Y)
]

乗法定理

[tex:
p(X, Y) = p(Y | X)p(X)
]

ベイズの定理

[tex:
\displaystyle p(Y, X) = \frac{p(X | Y) p(Y)}{p(X)}
]

正則化した誤差関数

[tex:
\displaystyle \tilde{E}(\mathrm{W}) = \frac{1}{2} \sum_{n = 1}^N \\{ y(x_n, \mathrm{W}) - t_n\\}^{2} + \frac{1}{2}||\mathrm{W}||^2
]

数学や機械学習の本を読むと難しい数式が出てきて、抵抗感があったのですが、TeXを使うことでより数式が身近なものに感じてきました。

プログラムは好きだけど数式は苦手という人はTeXから入るといいかもしれない。

参考サイト

www.latex-cmd.com

whoisコマンドについて

ネットワーク

インストール方法

Windows

以下のリンクからファイルをダウウンロード、解凍し、exeファイルをパスの通っているディレクトリに置く。

https://technet.microsoft.com/ja-jp/sysinternals/whois.aspx

Linux(CentOSの場合)

yum install whoisではインストール出来ない

sudo yum install jwhois

使用方法

whois [ドメイン名]

注意

VPNに繋いで使おうとしたところWindowsでもLinuxでもwhoisコマンドが使えなかった。

VPNから切断したところ使えたため、接続先のファイアーウォールで止められてしまったためと思われる。

whoisコマンドはTCPの43番ポートを使う。