u++の備忘録

Pythonによる勾配降下法の実装

勾配降下法

 目的関数{J}の1次微分を求めて、勾配の逆方向にパラメータ{\omega}を逐次的に更新していく手法。

数式表現

{\omega^{(m+1)}\gets\omega^{(m)}}-\eta\nabla_\omega J(\omega^{(m)})

実装

条件

 目的関数は{J(x)=x*(x-4)+5}に設定。明らかに{x=2}で最小となる。
f:id:upura:20170705111311p:plain

コード
import numpy as np
import matplotlib.pyplot as plt

def J(x):
    return x*(x-4)+5

def diffJ(x):
    h = 1e-4
    return (J(x+h) - J(x)) / h

n = 100
x = np.linspace(0, 5, n)
np.random.seed(seed = 32)
stack = [] # プロット用のリスト

'''
# Graph
plt.xlim(-1, 6)
plt.ylim(-1, 8)
plt.xlabel(r"$\omega$")
plt.ylabel(r"$J(\omega)$")
plt.plot(x, J(x), "b")
plt.show()
'''

# 初期値
omega = np.random.rand()*5
# ステップ幅
eta = 0.01

for i in range(100000):
    # プロット用のリスト
    stack.append(omega)
    # パラメータ更新
    omega = omega-eta*diffJ(omega)
    # 収束判定
    if eta*diffJ(omega)<=0.0001:
        break

# 結果表示
plt.xlabel(r"number of steps")
plt.ylabel(r"$\omega$")
plt.plot(stack, "r")
plt.show()
出力

 {x=2}辺りに収束していると分かる。
f:id:upura:20170705111346p:plain

主成分分析における行列表現

線形次元削減

 高次元の訓練入力標本{x_i}から低次元の表現{z_i}を求めること。
 つまり{m\times d}の埋め込み行列{T}を用いて、{z_i=Tx_i}として{z_i}を求めること。

f:id:upura:20170704135846p:plain

主成分分析

 次元削減後の表現{z_i}{x_i}の正射影であるという制約の下で、{z_i}{x_i}となるべく近くなる埋め込み行列{T}を決定する。
 下線部は{TT^\mathrm{T}=I}と行列を用いて表現できる。
 このとき{z_i}{x_i}は次元が違うので、単純に比較できない。そのため{z_i}に左から{T^\mathrm{T}}をかけて{T^\mathrm{T}z_i}として次元を揃える。
 これらの差{|T^\mathrm{T}z_i-x_i|=|T^\mathrm{T}Tx_i-x_i|}を最小化するような{T}を求めることになる。

『画像認識』(機械学習プロフェッショナルシリーズ)第1章まとめ

 某所にて、『画像認識』(機械学習プロフェッショナルシリーズ)の勉強会(輪読形式)がありました。

www.kspub.co.jp

 第1章を担当し、以下の資料にまとめました。第1章では画像認識の概要がまとめられており、その後の章で具体的に解説していく構成になっています。
 古典的な画像処理手法から、近年話題になっているニューラルネットを用いた画像認識まで、幅広い話題を体系的に扱っています。また最小二乗法など数学的記述も豊富に記載されており、読み応えがありそうです。

【遊戯王デュエルリンクス】粉砕!+タイラント・ドラゴンの1ショットキル

海馬のスキル「粉砕!」と「タイラント・ドラゴン」を使った1ショットキルデッキを紹介します。

場に「タイラント・ドラゴン」を召喚し「流星の弓―シール」を装備。スキル「粉砕!」を発動し、攻撃力を300上げます。これだけで攻撃力2200で2回直接攻撃できる「タイラント・ドラゴン」が完成し、1ターンで勝利できます。

f:id:upura:20170701230122p:plain

iPhoneでホームボタンを連打すると変な音声案内機能が起動する問題の解決法

画面が割れてしまったため、最近iPhoneの本体を交換しました。するとホームボタンを連打した際に、音声案内のような変な機能が起動することに苦しめられました。(せっかちなので、時おりホームボタンを連打しがち)

その現象を防ぐ設定方法をまとめておきます。

まずは「設定」>「一般」>「アクセシビリティ」へ移動します。

調べたところ、その画面の一番上にある「VoiceOver」が、ホームボタンの「トリプルクリック(三連打)」で起動しているそうです。
f:id:upura:20170701212205p:plain

トリプルクリックで、OnとOffが切り替わります。
f:id:upura:20170701212339p:plain

この機能が起動しないようにするには「アクセシビリティ」の画面を下にスクロールし「ショートカット」の設定をします。
f:id:upura:20170701212428p:plain

現時点では「VoiceOver」にチェックが入っているので、そこをタップしてチェックを外せば解決です。
f:id:upura:20170701212533p:plain
f:id:upura:20170701212538p:plain

ウェブで手軽に格好良いスライドを作れる「slideship」が良さげ

f:id:upura:20170628212920p:plain

ウェブで手軽に格好良いスライドを作れるという触れ込みのサービス「slideship」(β版)が本日公開されました。

日本語のプレスリリースはこちら:
prtimes.jp

ざっとユーザーガイドなどを見てみた印象ですが、markdown形式の記述によって、手軽に格好良いスライドを作成できそうです。初期の段階から数式対応なのも個人的には非常に評価が高いです。

とは言え、いくつか気になる部分もあります。

  1. ログイン認証の選択肢
  2. 対応言語
  3. マネタイズの方向性
  4. 他のサービスとの差異化

1について、現状GitHub (https://github.com/) アカウントの OAuth認証のみでログインできます。また2について、現在のサービスは英語のみで案内されています。現時点では「markdown形式」に違和感なく対応できる層を主な対象にしているため取りあえず必要最低限の仕様になっているのかなと。ただ将来的には、より多様な選択肢があっても良い気もします。

※ 検討しているらしいです

3について、個人的にはどのような形でマネタイズを図っているかが気になりました。ありがちなフリーミアム(無料機能+有料会員専用機能)なのか、広告モデルなのか、はたまた別路線なのか……。

4は、群雄割拠のウェブサービス業界の中で、どのような立ち位置を目指しているかです。個人的には、表現しづらいですが用意されている「グラデーションテーマ」の格好良さ・綺麗さ・お洒落さが魅力に感じました。ただこの価値は普遍的にアピールしづらい面もあり、どういった部分で生き残りを狙うかは難しい部分だと思います。

いろいろ書きましたが、ユーザー目線で、この類いのサービスが切磋琢磨してより便利になっていくのは大歓迎です。「slideship」の今後の展開に大いに期待したいです。

【遊戯王デュエルリンクス】カオス・ソルジャーが格好良いから、出せそうなデッキ組んだ

「カオス・ソルジャー」が出したいというのが動機。少なくとも、もう1枚「カオス・ソルジャー」が欲しいけど出ない。

f:id:upura:20170628205806p:plain

[追記:20170721]
カオス・ソルジャー2枚目を手に入れたので更新。

f:id:upura:20170721221858p:plain