めも

これはメモ。

.gitconfigの設定について

.gitconfigの設定について確認。

ドキュメント

読み込み順

system > global > local の順番で読み込まれる。 globalの設定は ~/.gitconfigに記述される(gitconfigファイル記述例)。

設定

ユーザー名、メールアドレス

git config --global user.name "My Name"
git config --global user.email myname@example.com

ファイル名の大文字・小文字の変更を検出するように設定

git config --global core.ignorecase false

git statusなどの際に日本語ファイル名を表示

git config --global core.quotepath false

コミット時のエディタを変更

vim

git config --global core.editor 'vim -c "set fenc=utf-8"'

atom

git config --global core.editor "atom --wait"

sublime text

git config --global core.editor "mate -w"

gitコマンドの出力の色変更

参照;

git config --global color.diff auto
git config --global color.branch auto

など。

改行コードを自動で変換する・しないの指定

trueの場合はチェックアウトの際に改行コードをLFからCRLFに変換します。

git config --global core.autocrlf true
git config --global core.autocrlf false

gitの認証情報をキャッシュする

git config --global credential.helper 'cache --timeout=1000'

xcrun: errorが出る場合

エラー内容

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

この場合、xcode-select --installをコマンドラインから入力して xcode-select をインストールすれば解決。

機械学習関係の論文を調べる時にみるページ

自分用。

まとめ・検索

Browse state-of-the-art

各論文とその論文の実装へのリンクがまとまっている。

また、データセットごとに特定の評価指標ごとのリーダーボードがあり、どの論文がどのデータセットで一番性能を出しているかを一目で確認できる。ただし、各論文の細かい実験設定は自分で確認しないといけない。

f:id:misos:20190202174709p:plain
CIFAR-10の分類におけるリーダーボード

arxiv sanity

twitterでバズっている論文のランキングを見ることができる。

awesome-deep-learning-papers

2016年までの機械学習関係の主要な論文と外部のサイトへのリンクをまとめています。

Search ICLR 2019

ICLRなど openreview を用いた査読を行う会議の場合、 Webページをクローリングしてこのような検索サイトが作られることが多い? 2018年のものは Search ICLR 2018: Top 100 papers

朱鷺の杜Wiki

解説・輪読

cvpr-challenge

CVPRを中心にCV系の論文をまとめスライドにまとめている。

nlpaper-challenge

Deep Learning JP

slideshareに各論文の解説資料を投稿している。元は https://deeplearning.jp/のサイト。

arXivTimes

各自がピックアップした論文を一言でまとめる。

ブログ

IBM Research Blog

Stanford NLP Group

The Berkeley Artificial Intelligence Research Blog

I’m a bandit - Random topics in optimization, probability, and statistics. By Sébastien Bubeck

Airbnb Engineering & Data Science(Medium)

facebook research

最近買った本について

最近 = 2019/01/03周辺です。思い出したら追記します。

何かおすすめあったらぜひ教えてください。

コードコンプリート上・下 (著:Steve McConnell)

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

CODE COMPLETE 第2版 上 完全なプログラミングを目指して

リーダブルコードと合わせてたまに見返すために購入。

気化熱:ダイスケリチャード作品集 (著:ダイスケリチャード)

ダイスケリチャード氏の画集、購入理由不明ですが気に入ってます。

mirage (著:あきま)

あきま氏の画集。

去年の中旬に「人工知能」の表紙を描いていた方だと思いますが、それをきっかけに見つけて購入。

スペクトラルウィザード (著:模造クリスタル)

漫画です、前から好きなので購入。

「ミッションちゃんの大冒険」の人です、今はもう公開されてないかな。

蟹に誘われて (著:panpanya)

蟹に誘われてしまい無事購入。

バンディット問題の理論とアルゴリズム (著: 本多 淳也, 中村 篤祥)

バンディットの基本を勉強するために購入。

ちなみに本多先生のIBIS2014でのバンディットに関するチュートリアル資料は以下にあります。

http://ibisml.org/archive/ibis2014/ibis2014_bandit.pdf

この本とは直接関係ないですがクックパッドでのバンディットの応用事例が紹介されていました。

MONONOKE SHARING (著: クール教信者)

「もののけシェアリング(全4巻)」の英語翻訳版を全冊輸入。去年始めから3ヶ月おきくらいに1巻から出版しています。漫画とかの”擬音”が英語だとどんな感じに描かれているのか知りたくて購入。

AWSによるサーバーレスアーキテクチャ (著:Peter Sbarski)

AWSの理解を深めるために購入。

前処理大全 (著: 本橋 智光)

タイトルから例えば類似カテゴリの名寄せだったりクラス間のラベル数の不均衡を取り除くためのUnder-sampling とかの辞書的なものを想像したのですが、そうではありませんでした。

Amazonレビュー等をみてから購入検討した方が良さそう、普段 kaggle だったり業務で sql 使ってデータ整形してる人にとっては新規な知識はないかもしれません。

プレゼン資料作成関係

いくつか借りたり購入したりしてみましたが、読まなくてもよかったかな。

「スライドを読みやすくするための図と文字の位置関係」とか「スライドの順番」など色々書いてありましたが、自分より一つ上のレイヤー(少なくとも研究とか開発とかやらない人)のためな感じがしたので紹介しません。

pythonで単位付きの数値の文字列(例:100円, 100kg)の数値のみ取り出したい

なぜか下書きで放置されていたので。

parse を用いる

pip install parse にてインストールした後に、

from parse import parse
parse("{:d}{:S}", "500円").fixed, parse("{:d}{:S}", "50.0円").fixed, parse("{:f}{:S}", "50.0円").fixed

結果

((500, '円'), (50, '.0円'), (50.0, '円'))

str.isdecimal(), str.isdigit(), str.isnumeric() を用いる

''.join(c for c in "500円" if c.isdigit()),  ''.join(c for c in "50.0円" if c.isdigit()), ''.join(c for c in "50.0万円" if c.isdecimal())

結果

('500', '500', '500')

str.isdigit() などは . を数値判定できないので

''.join(c for c in "50.0円" if c.isdigit())

の出力も 500 になる点に注意。

以下ドキュメントのstr.isdigit() の項目。

正規表現を用いる

import re
re.sub(r'\D', '', "500円"), re.sub(r'\D', '', "50.0円")

結果

('500', '500')

論文メモ: Dataset Distillation について

個人用のメモ。

概要

  • 画像分類モデルの訓練にて、学習に効果の高い画像と学習率を得る手法を提案
  • モデルの初期パラメータが生成される分布と学習エポック数に基づいて画像と学習率を得る
  • CIFAR-10にて100の生成画像からAccuracy 50%越え
  • 現実的な応用の中でこの手法を用いて得られた画像・学習率が有用になるシチュエーションとしてどのようなものがあるかは未検討

元論文

Wang, Tongzhou, et al. "Dataset Distillation." arXiv preprint arXiv:1811.10959 (2018).


モデルの蒸留(distillation)が複雑なモデルで学習した知識をよりシンプルなモデルに転移させることを指している。この論文では、モデルではなくデータセットの蒸留を行う。巨大な訓練データをより小さなセットの訓練データに抽出して同時に最適な学習率を求める。その後、固定されたモデルを蒸留したデータと求めた学習率で数エポックだけモデルを訓練し、目的関数が減少することを確かめる。

実際に、実験では 60,000 枚のMNISTの画像に付いて、各クラスごとに一枚の合成画像を作成して訓練させれば高い性能が得られた。このような合成画像を作成する方法を Dataset Distillation, 作成された訓練データを distilled images と呼ぶ。

関連研究

モデル(の学習した知識)の蒸留

モデルの蒸留:[1503.02531] Distilling the Knowledge in a Neural Network

github.com

他、データセットの枝刈りと選択・勾配ベースのハイパーパラメータ探索・データセットの可視化など。

問題設定・記法

  • 入力:固定されたネットワーク構造、モデルのハイパーパラメータの初期値、モデルの訓練に用いるデータセット
  • 目的関数: argmin ℓ(x; θ) となるようなθを求める
  • 出力:合成された(入力として与えた訓練データよりも少ない数の)データセット+学習率

  • θ:moderunoparame-ta

  • x:={x}_{i=1}^N が訓練データセット全体
  • ℓ(x; θ):訓練データセットxに対する損失
  • μ:学習率

手法

モデルの初期値が固定されている場合

モデルの初期パラメータが固定ならば、蒸留されたデータ=「勾配が蒸留前のデータで訓練した時に得られたパラメータに向かう方向の勾配が得られるデータ」なので求めることができる。このようにして得られた画像はモデルの初期パラメータの情報も含んでいるため実用上役に立たない(初期パラメータも全てあらかじめ知っておく必要があるため)。

モデルの初期値がランダムに決定される場合

モデルの初期パラメータが特定の分布から生成されると仮定すれば、合成画像x+と学習率μ+を求める問題は以下のような最適化問題として定式化される。

f:id:misos:20190127132139p:plain
本論文(4)式

この時、モデルの初期のパラメータθ0は分布 p(θ0) からランダムサンプリングで選ばれる。Algorithm1を使って蒸留された画像と学習率を求める。このアルゴリズムでは一エポックしかモデルを訓練しない場合のケースだが複数エポックへの拡張もできる。

f:id:misos:20190127131817p:plain
Dataset Distillationアルゴリズム

実験で比較に用いるもの

  • ネットワークのパラメータ初期化方法の比較

    • 固定(fixed initialization):
    • ランダム初期化(random initialization):
    • 学習済みモデルからのランダムなパラメタ:
    • 学習済みモデルからの固定されたパラメタ:
  • 異なる目的関数での比較

実験

ベースラインとして以下を用意。

  • Random: カテゴリごとにランダムに選ばれた画像
  • Optimized: ランダムな画像のうち、訓練に有効だった画像上位20%
  • k-means: 各カテゴリで k-means によるクラスタリングを行いそのセントロイドとなった画像を選択(比較のため選択する画像の数は提案手法で蒸留した後の画像枚数と同数だけ選ぶとする)
  • Average: 各カテゴリで画像の平均をとりその画像を各勾配計算の際に用いる

学習率は {0.001, 0.003, 0.01, 0.03, 0.1, 0.3} の値でそれぞれ実験を行い、エポック数は {1, 3, 5} とした場合でそれぞれ実験。この値の組み合わせの中から最も性能が高かった場合の結果を実験結果に示している。

ランダム初期化をする場合について、初期化の方法は Xavier initialization (tf.contrib.layers.xavier_initializer  |  TensorFlow)。事前学習なしでのMNIST、事前学習ありでの画像分類(Alex-netでのImage-Net画像の分類)について実験を行い、蒸留したデータを用いれば数エポックでモデルの性能が(蒸留していないデータを用いて同じ数のエポックだけ訓練した場合と比較して)向上することが確認できた。

以下のページにて実験結果の簡単な概要を確認できます。

ssnl.github.io

実装

著者らによる実装が公開されています。