かれ4

かれこれ4個目のブログ

DeepLearningのトレンドについて調べてみた。

最近DeepLearningに力を入れているわけですが、広く普及するのかどうか非常に気になるところです。

DeepLearningがこの数年くらいで急に盛り上がってきている気はするけど、
GoogleTrendsに聞いてみたら、なんか不思議な結果


ここまではなんとなくわかります。
といいたいところだけど、2013年の1月から急激に伸びているのがわけわからないんです。

ふとDeepLearningって2013年の1月に出来た言葉なんだっけと考えてしまうくらい急激に伸びている。実際にそれ以前にDeep Learningという言葉があったのかなかったのかちょっと見てみました。
f:id:tottokug:20140829094449p:plain
2011/01/01 - 2012/12/31に期間を絞ってみたらやっぱりそんなことはなかったです。良かった。

しかし不思議なのが次のグラフ

なぜにこんなに中国からの検索が多いのか、そして、ついで日本が多いのか、不思議ではあります。

ちなみに近そうなものとして、NeuralNetworkとMachineLearningで見てみると、色々な国で検索されている事が分かります。
Neural Network

Machine Learning


なぜDeep Learningだけ飛び抜けて中国なのかっていうのを考えていた時にふと「
Chinese room - Wikipedia, the free encyclopedia
」を思い出し、DeepLearningで結構な知見を持っているGoogleからの何かのメッセージなのかと思いました。


にしても、どうして中国からが飛び抜けて多いんだろう。。。

SpotInstanceを使ってAMIを作る時にCloudAutomatorを使うと楽できる

何かしらのAMIを作る時、本来使うインスタンスよりも高級なインスタンスを使って、
作成するとコンパイルも早いし便利ですよね。

でも、高級インスタンスを使うと時間は短くなったとしても、お高かったりします。

そんな時にはSpotインスタンス

Spotインスタンスを使ってAMIを作れば安いし、速度的にも快適なことこの上ないです。
Spotインスタンスならc3.xlargeのお値段でc3.8xlargeが使えます。

しかし、SpotインスタンスでAMIを作る時に気にしなくては行けないのは、途中で落ちてしまう事。
(私はSpotインスタンスは最低価格でしか入札しないんです。)
せっかく作ってたのに、途中で落ちてしまっては元も子もありません。

今回はCloudAutomatorを使って自動的にAMIを作り続ける事をやってみます。

まずはSQSでQueueを作ります。

そしてCloudAutomatorでSQSトリガーのジョブを作ります。
f:id:tottokug:20140827165847p:plain
こんな感じで作りました。
ここで大事なのは、トリガーになるQueueと成功時に送るQueueを同じにすることです。
これによって、永久ループが完成します。

永久ループが完成するのは良いのですが、このままではCreateImageのAPIの戻りが成功の場合にジョブは成功とみなされ、成功しましたよのMessageがSQSに投げられてしまいます。
そうすると、またSQSトリガーなので、ジョブが実行されてしまうのですが、AMIを作っている途中にもう一度、Create Imageが呼ばれるとAPIは失敗します。=>このジョブは失敗します。

これを回避するために、2つの方法を取ります。どちらか一方でも良いですし、両方やっても良いです。

1.QueueにDelivery Derayを設定する。
f:id:tottokug:20140827165645p:plain
2.失敗時にも同じQueueにメッセージを送る。
f:id:tottokug:20140827171229p:plain

1についてはほとんどデメリットはありませんが、DeliveryDerayで設定した時間より短い時間でのAMI作成が出来ません。ただ、そんなに高頻度で作っても仕方ないと思うので、デメリットとは言えないかもしれません。

2については、ジョブを大量に消費してしまう可能性があります。プランによっては致命傷です。

ということで、1と2の両方を組合せて使う事でいい感じにAMIを作る事が出来るはずです。
世代管理の数もうまいこと調整して、環境構築の際に変な事してしまっても戻すとか使っても良いと思います。

ちょっと贅沢にCloudAutomatorを使うとこんな事が出来ました。
いちどこのジョブを作っておけば、インスタンスを変更したり、構築中なタグを用意したりすれば、ずっと使えるジョブになります。

運用ではないですが、準備段階でも使い道がありそうなCloudAutomatorでした。

ものっすごく雑なMachine Learningを使いこなすための用語紹介

Azure Machine Learningを使いこなすには、experimentのところにある色々が何かを理解しないとツライかもしれません。逆に理解して入ればAzure Machine Learningの便利さがわかるんじゃないかと思います。

ちゃんとしたAzure Machine Learningのドキュメントはこちら


日本語での呼び方はわかるけど、英語で書かれているせいで分からないなんて事もあるかと思うので、対訳をしようかとも思ったのですが、めんどくさかったので、Google翻訳に入れました。
鉄道模型とか出てるくらいの雑さです。


Google翻訳Wikipedia ggrks
Data Format Conversions データ形式の変換 ggrks
Convert to ARFF ARFFに変換 ggrks
Convert to CSV CSVへの変換 ggrks
Convert to Dataset データセットへの変換 ggrks
Convert to SVMLight なSVMLightへの変換 ggrks
Convert to TSV TSVに変換 ggrks
Data Transformation データ変換 ggrks
Filter フィルター ggrks
Apply Filter フィルタの適用 ggrks
FIR Filter FIRフィルタ ggrks
IIR Filter IIRフィルタ ggrks
Median Filter メディアンフィルタ ggrks
Moving Average Filter 移動平均フィルタ ggrks
Threshold Filter 閾値フィルター ggrks
User Defined Filter ユーザ定義フィルタ ggrks
Manipulation 操作 ggrks
Add Columns 列の追加 ggrks
Add Rows 行を追加します。 ggrks
Group Categorical Values グループカテゴリ値 ggrks
Indicator Values インジケータ値 ggrks
Join 参加 ggrks
Metadata Editor メタデータエディタ ggrks
Missing Values Scrubber 欠損値スクラバー ggrks
Project Columns プロジェクトの列 ggrks
Remove Duplicate Rows 重複行を削除する ggrks
Sample and Split サンプルとスプリット ggrks
Partition and Sample パーティションとサンプル ggrks
Split スプリット ggrks
Scale and Reduce スケールと削減 ggrks
Apply Quantization Function  量子化機能を適用します ggrks
Clip Values クリップ値 ggrks
Quantize クオンタイズ ggrks
Transform Data By Scaling スケーリングすることでデータの変換 ggrks
Feature Selection 特徴選択 ggrks
Filter Based Feature Selection フィルターベースの機能の選択 ggrks
Linear Discriminant Analysis 線形判別分析 ggrks
Machine Learning 機械学習 ggrks
Evaluate 評価する ggrks
Cross Validate Model クロス検証モデル ggrks
Evaluate Model モデルの評価 ggrks
Evaluate Recommender 推薦を評価 ggrks
Initialize Model モデルを初期化します ggrks
Classification 分類 ggrks
Multiclass Decision Forest 多クラス決定の森 ggrks
Multiclass Decision Jungle 多クラス決定ジャングル ggrks
Multiclass Logistic Regression 多クラスロジスティック回帰 ggrks
Multiclass Neural Network 多クラスニューラルネットワーク ggrks
One-vs-All Multiclass ワンVS-すべての多クラス ggrks
Two-Class Averaged Perceptron 2クラスパーセプトロンは平均化 ggrks
Two-Class Bayes Poit Machine 2クラスベイズPoit機 ggrks
Two-Class Boosted Decision Tree 2クラスブーストディシジョン·ツリー ggrks
Two-Class Decision Forest 2クラス決定の森 ggrks
Two-Class Decision Jungle 2クラス決定ジャングル ggrks
Two-Class Logistic Regression 2クラスロジスティック回帰 ggrks
Two-Class Neural Network 2クラスニューラルネットワーク ggrks
Two-Class Support Vector Machine 2クラスサポートベクターマシン ggrks
Clustering クラスタリング ggrks
K-Means Clustering K平均クラスタリング ggrks
Regression 回帰 ggrks
Bayesian Linear Regression Model ベイズ線形回帰モデル ggrks
Boosted Decision Tree Regression ブーストディシジョン·ツリー回帰 ggrks
Decision Forest Regression 意思決定森林回帰 ggrks
Linear Regression 線形回帰 ggrks
Neural Network Regression ニューラルネットワーク回帰 ggrks
Ordinal Regression 順序回帰 ggrks
Poisson Regression ポアソン回帰 ggrks
Score スコア ggrks
Assign to Clusters クラスタへの割り当て ggrks
 Score Matchbox Recommender スコアマッチボックス推薦 ggrks
Score Model スコアモデル ggrks
Train トレイン ggrks
Sweep Parameters スイープパラメータ ggrks
Train Clustering Model トレインクラスタリングモデル ggrks
Train Matchbox Recommender トレインマッチボックス推薦 ggrks
Train Model 鉄道模型 ggrks
Statistical Functions 統計関数 ggrks
Apply Math operation 数学演算を適用します ggrks
Descriptive Statistics 記述統計学 ggrks
Elementary Statistics 小学校の統計 ggrks
Hypothesis Testing T-Test 仮説検定T検定 ggrks
Linear Correlation 線形相関 ggrks
Probability Function Evaluation 確率関数評価 ggrks
Replace Discreate Values 離散的な値を交換してください ggrks
Text Analytics テキスト分析 ggrks
Feature Hashing  フィーチャーハッシュ ggrks
Named Entity Recognition 固有名詞抽出 ggrks

CloudAutomatorでWindowsInstanceのAMIを世代管理してみた

ふと、CloudAutomator でAMI作るのって当然Windows Instanceでも大丈夫だよね???

というところから試してみました。

f:id:tottokug:20140812094832p:plain
こんな感じでジョブを作って試してみました。


先に結果から言うと、完璧です。


世代管理についても
3世代目作っておいて
f:id:tottokug:20140812094233p:plain
4世代目を作ったら
f:id:tottokug:20140812094244p:plain

ちゃんと第1世代が消されています。

消し忘れによって、無駄にAMIにかかる費用がかかってしまうなんてことも防げそうです。
1つ2つならまだしも、沢山のAMIを管理している場合は世代管理の消し忘れの防止にもなりそうですし、
めんどくさい作業をやらなくても良いのはやっぱり良いなと思います。


少し気になった点として、1世代目の時だけTagがついていないのはなんでなんだろうというのがありました。

あと、好きなTagが付けられるのですが、一つしか付けられないので、おそらくNameを付けておしまいになってしまいそうです。
Cost Allocationとか使っていると、タグは複数付けられると嬉しいなと思いました。

Cloud AutomatorでCloudFormationのStackを定期的に立ち上げる

サーバーワークス社がこないだリリースしたCloud Automatorが気になったので触ってみました。

EC2を立ち上げたり、EBSのスナップショットとったりと色々出来そうですが、
CloudFormationのStackが立ち上がったりしたら、なんでもありになるなと思いました。

というわけで、スクリプトを一つ書いてみました。
下記のスクリプトをrc.localに書いておけば、EC2の起動時に実行され、CloudFormationのStackが作られるようになります。





OLD_IFS=$IFS
IFS='
'
TEMPLATEURL=""
PARAMETERS=""
REGION=$(ec2-metadata -z | cut -d' ' -f2|perl -pe 's/[a-z]$//')
for tag in $(aws --region "$REGION"  ec2 describe-instances --instance-ids i-db1c24dd  --output text |grep TAGS|cut -f2-3)
do
  echo $tag
echo $tag |grep -e "^Template\s" |wc -l

  if [ $(echo $tag |grep -e "^CfnTemplate\s" |wc -l) -ne 0 ];
  then
    echo "template url"
    TEMPLATEURL="$(echo $tag |perl -pe "s/\w+\s//")"
    continue
  fi 


  if [ $(echo $tag |grep -e "^CfnParameters\s" |wc -l) -ne 0 ];
  then
    echo "parameter hit"
    PARAMETERS="$(echo $tag |perl -pe "s/\w+\s//")"
    continue
  fi 
done
IFS=$OLD_IFS

echo TEMPLATE=$TEMPLATEURL
echo PARAMETERS=$PARAMETERS


aws cloudformation --region "$REGION"  create-stack --template-url "$TEMPLATEURL" --parameters "$PARAMETERS"


EC2のタグによって、CloudFormationの制御をします。

Tag name Tag value
CfnTemplate テンプレートのURL(S3)
CfnParameters CloudFormationに渡すパラメータ

タグを変更することで、起動するStackのtemplateを制御する事にしました。


ただ、Stackの削除はしていないので、Stackの削除をするInstanceも作って置くのも良いかもしれません。もしくはここで起動したStackのIDをどこかに保存しておいて、rc6.dにStackを削除するスクリプトでも入れておけば、このEC2が立ち上がってる間だけ、Stackも存在するなんてことも可能そうです。


とはいえ、Stackの作成に失敗しても、何の制御も入っていないので、まだまだ試作段階を抜けていません。が、ブラッシュアップしていけば、複雑な動きもCloud Automatorから制御出来るようになりそうです。

CfnというPrefixを付けたモノをそのままコマンドラインに渡すのもありかなと思っています(TagInjectionの予感は気にしません。)

TeXを最近はじめてみた

最近夏風邪でダウンで寝てばかりだったからコレを機会になにか一つ身につけておこうと思った

出来れば、かなり古くて枯れてるけど、現役の技術

ということで{ \LaTeX} はじめました。

今初めて、はてなブログでもtexが使える事が分かりました。


とりえあず、手元にTeXの環境をつくろうと思って、
http://tug.org/mactex/
ここから.pkgを落としてきてインストール

$ sudo tlmgr update --self --all 

までやった