The jonki

呼ばれて飛び出てじょじょじょじょーんき

帰納バイアス (Inductive bias)

機械学習において,学習データに現れないデータを予測するためには,何らかの制約が必要となる.この制約のもと,モデルを一般化できる.この制約を帰納バイアス (Inductive bias)と呼ぶ.

例えば線形回帰のinductive biasを考える.入力xと出力yは線形の関係であり,その目的関数は二乗誤差を最小化することにある.という制約が線形回帰のinductive bias.データの分布に何らかの制約(仮定)をおかないと,任意の値を求めるのは事実上不可能である.

下記は各機械学習手法における帰納バイアスの一覧.
The Inductive Biases of Various Machine Learning Algorithms - Laura Diane Hamilton


参考
Inductive bias - Wikipedia



違ったらコメントください.

Dockerでgithubのプライベートリポジトリをsshでcloneする

調べてみると色々方法があるようだったが,下記のリンクの方法が一番よかった.Dockerでcloneする用に鍵を作ってそれを利用する方法.英語読むのダリィという方のため(といいつつ自分の作業用メモ)この記事書いておきます.
tarunlalwani.com

Dockerでcloneする用のsshの鍵を作る

大体の人はデフォルトのパスにすでにid_rsaがあると思うので上書きしないよう注意.

$ mkdir keys
$ ssh-keygen -t rsa -b 4096 -C "xxxxxx@yyyyy.com"
Enter file in which to save the key (/home/jonki/.ssh/id_rsa): /home/jonki/keys/id_rsa
Enter passphrase (empty for no passphrase): 何も入力せずエンター
Enter same passphrase again: 何も入力せずエンター
Your identification has been saved in /home/jonki/keys/id_rsa. 

// known_hostsをid_rsa,id_rsa.pubがあるところに作っておく
$ ssh-keyscan github.com >> keys/known_hosts
公開鍵をgithubに登録

githubの設定から,[New SSH key]を押し,作成されたid_rsa.pubをコピーして貼り付ける.

cloneするDockerfileを準備

Imageは何でも良いのだが,入れるImageによってはgitのインストールコマンドも記述する必要がある.また作成した鍵を含むkeysディレクトリをDockerfileと同じディレクトリに置いておく.うまく行けば,「Successfully tagged ...」みたいなログが出るはず.

$ cd <your work space>
$ mv /home/jonki/keys .
$ vim Dockerfile
FROM python:3.6.3

# 作ったkeysディレクトリをコンテナ上にコピー
RUN mkdir -p /root/.ssh
COPY keys /root/.ssh

# 入れるImageによってはgitをインストールするコマンドを入れる必要がある
# RUN apt-get -y update && apt-get -y install --no-install-recommends git ssh みたいな

# git clone
WORKDIR /work
RUN git clone git@github.com:username/your-private-repo.git

CMD ["/bin/bash"]
実行して確かめる
$ docker build -t private-repo .
$ docker run -it private-repo
root@xxxxxxx:/work# ls
private-repo

海外からLightsailで日本国内にプロキシサーバーを立てる

f:id:jonki:20180310111817p:plain

私的利用のために必要になったので,書いておきます.日本国内(あるいは海外)にプロキシサーバーを自前で建てようとした場合,VPSの契約などが必要になると思います.そこで以前にもお世話になった某サイトでサーバーを借りようとした所,リソースが余っていないので無理!とまさかの契約出来ない自体になりました.大したことしないんで,AWSでもいいんですが,あの課金システムが心臓によく無い..と思ってたら,同じくAmazonLightsailというサービスを見つけました.正直ちゃんと説明読んで無いんですが,AWSの簡易版&固定料金版という感じです.固定料金に惹かれて月5ドルプランを契約しました.

使い方&セットアップ

使い方はめちゃくちゃ簡単で,マシンのリージョン,使いたいOSを指定するだけで終わります.SSHの設定などもデフォルト設定であればブラウザ上からいつでもできるので鍵の管理などしなくても大丈夫.私は東京にサーバーを建てたかったので「東京、ゾーン A (ap-northeast-1a)」を選択しました.さらにグローバルIPも追加料金なしで確保できたのでアタッチしました.ファイアウォールの設定が簡易化されいて,アクセス元IPアドレスは指定できずにポート番号の指定しかできないので,ガチガチに固めたい場合は不向きです.しかしこのUIの簡易さは捨てがたいものがあります.

プロキシはsquidで.squidのインストールは簡単です.私はUbuntu(16.04)を選択したのでUbuntuのコマンドおよび設定ファイルを書いておきます.Lightsail上では細かいファイアウォールは設定できないので,squidアプリ上ではしっかりアクセスコントロールしておきましょう.

$ sudo apt-get install squid
$ vim /etc/squid/squid.conf

# アクセスコントロール
acl my_home_net src xx.xx.xx.xx/24
http_access allow my_home_net
visible_hostname unkown

# プロキシ情報の隠蔽
forwarded_for off
request_header_access X-FORWARDED-FOR deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

http_access deny all

# プロキシポート
http_port 12345

ポートを解放する必要があるので,Lightsailのネットワーキング,ファイアウォールから,【Custom TCP 12345】と設定します.これでプロキシサーバーにうーん,簡単.

コンフィグを編集し終えたらサービスを再起動(ちょっと時間かかります).またサービスが自動起動するようにしておきましょう.うまく言ってるかどうかは,ログを眺めてればわかると思います.

$ sudo service squid restart
$ sudo update-rc.d squid defaults
$ sudo tail -f /var/log/squid/access.log


プロキシを設定したら診断くんで,IPが変わっているか確認しましょう.私の環境で,「疑惑 ~20%:proxy の可能性もわずかにあります。」と出ました.

まとめ

Lightsailめっちゃ簡単でびっくりしました.また月額固定金も割り切ってて私には合っていました.またプロキシも十分に働いてくれています.(変な使い方はしないようにね)

Chrome extensionでarXivの情報をコピーする

chrome.google.com

arXivのページを見てる時に,私はメモとしてタイトル,筆者,URLをコピーして,Evernoteとかにまとめてたりするんですが,量が多いとそのコピー作業が面倒です(2回コピーしないといけないので).ということで,久しぶりにChrome extensionを作りました.arxivの論文のページでこの拡張のアイコンをクリックすると,下記のような情報をクリップボードにコピーします.はい,それだけです.使う人はまずいないと思いますが,ストアに公開しておきました

Generative Adversarial Networks
Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio
https://arxiv.org/abs/1406.2661


ソースコードはこちら.この拡張はpage actionとして,動いているのでarxivのページでしか動作しません.今日サクッと作ったので対してテストしてませんので悪しからず.

github.com

Visual Studio CodeでIntegrated/ExternalのTerminal/Consoleを使う

`launch.json`に書けば良い.pythonで`input`によるテキスト入力を受けたい時に,デバッグコンソールでは入力できないことに気づきこの設定を探した.


VS Code内のIntegrated Terminalで実行したい場合

"console": "integratedTerminal"


VS Code外のTerminalで実行したい場合

"console": "externalTerminal",
"externalConsole": true 
参考

github.com