ゆるふわめも

東京か京都にいます。

学会発表のスライドの準備・練習のための参考動画のメモ

  • テンプレート
    • はじめに
    • 背景・研究の動機
    • 提案手法(Proposed method)
    • 実験(Experimental settings)
    • 結果・考察
    • 終わりに
    • その他
  • 参考動画
    • 15~25分
      • Topic Models with Power-Law Using Pitman-Yor Process
      • Psychological Advertising: Exploring Consumer Psychology for Click Prediction in Sponsored Search
      • Multi-Label Relational Neighbor Classification using Social Context Features
      • Indefinite Scalability for Living Computation
      • Near Real-Time Transportation Mode Detection Based on Accelerometer Readings
    • 30~60分
      • SIGKDD 2013 Innovation Award
      • Mining Heterogeneous Information Networks
    • 90分以上
      • Neural Networks
      • Geometric Methods and Manifold Learning
      • Bayesian or Frequentist, Which Are You?

海外と国内で発表するため、発表時間ごとの学会発表動画をメモ。 何を話しながら進めるかとQandAの練習をしないといけない。 動画は機械学習関係のみ。

練習しないと。

テンプレート

スライドの自分用チェックリスト。

参考文献: Scientific Conference Presentations, Hilary M Jones,

はじめに

  • (必要なら)初めのページで全体の概要と発表で特に覚えてもらいたい箇所を強調する。
  • 概要を示す
    • ひとこと背景
    • 取り組む課題
    • 既存手法との差分・強調したい点(実データを使った、問題設定が特別など)
    • 本スライドが最終的に示したこと

背景・研究の動機

  • 背景Aのために課題Bを解決する必要がある。
  • 既存手法Cがあるが、Dという点が考慮されていない・部分的にしか解決されていない。
    • Cの用いた手法は〜という性質からDができない。
  • そこで提案手法ではDをEをすることで行う。
    • Eは〜だからDを解決できる可能性がある。
  • Eの効果を検証するために実験Fを行い、有効であった・ある条件の下では改善したことを示す。
    • 実験Fは〜を評価する評価指標を用いて(背景に基づいた)〜を示す。
  • これからの課題として、提案手法ではGが考慮されていない。
    • Eは〜という性質上〜が考慮できていない、分析の結果〜が不十分だった。
  • Gを解決するためにはHが考えられる・Gを考慮したモデルが必要である。

提案手法(Proposed method)

  • 手法・モデルの概要
  • なぜ(多くの選択肢があるかもしれないのに)この手法か
  • モデルの詳細・新しく考慮された点
  • 必要なノーテーションを最小限・わかりやすく定義

実験(Experimental settings)

  • 実験に用いるデータセット
  • 評価指標
    • 何を評価したものか
    • 評価指標の定義を式で示す

結果・考察

  • 実験結果をグラフ・数値で示す

    • はじめに全体の結果を示す(全データでの平均など)
    • グラフのx軸, y軸, ラベル, 提案手法をわかりやすく
    • 何を示すためのグラフ・結果なのか示す
    • (必要なら)モノクロ印刷でも判別できるようなカラーフィル・マークを利用
    • グラフの値の見方(どのようになれば改善なのか)示す
      • (できる限り)提案手法による影響度合いを可視化する
  • 既存手法との比較

  • 特徴分析・有効、無効だった特徴やデータに関する考察

終わりに

  • 結論(conclusion)
    • 既存との差分
    • 実験から示されたこと
    • 展望

その他

  • タイトルにて発表日時・場所・所属
  • ページ番号
  • タイトル/そのページで一番言いたいメッセージ/詳細の関係になっているか
  • 必要ならレジュメ・補遺
  • あらかじめプロジェクタとの接続設定・Thunderbolt、Mini Display Portなどのコードの有無を確認

参考動画

チュートリアルとかと混ざってます。

続きを読む

ディープラーニングのパラメータ設定・更新方法に関するメモ

使う機会がありそうなのでメモ。 ただ正直目的関数を変更することはあっても、パラメータ更新手法は滅多に変更しないので資料も添付しない、存在だけ知っておく程度。

パラメータの初期化

Xavier Initialization

http://andyljones.tumblr.com/post/110998971763/an-explanation-of-xavier-initialization

He Initialization

Glorot initialisation

パラメータ更新の手法

Vanilla update

w += - learning_rate * dw というつまり一番シンプルな形式。

Momentum

Nesterov Momentum

上記三つの比較実験。自分も本当は実験して記事を書くべきなんだけども。

Nadam

Nesterov Momentum + Adam

AdaGrad

スライド資料: https://courses.cs.washington.edu/courses/cse547/15sp/slides/adagrad.pdf

AdaDelta

Adam(Adaptive Moment Estimation)

RMSprop

Eve

Improving Stochastic Gradient Descent with Feedback, Jayanth Koushik, Hiroaki Hayashi

ICLR2017における該当論文のレビューはここで公開されています。

その他多数

ICLRにサブミットされた確率的勾配法もしくはpolicy gradient関係の論文一覧、多い。

stochastic gradient descent – Amund Tveit's Blog

自分で定義した目的関数を使用して学習

Kerasの場合は

model.compile(loss=objective_function_defined_by_yourself, optimizer='nadam')

などと指定する。objective_function_defined_by_yourself

import theano.tensor as T

epsilon = 1.0e-9
def objective_function_defined_by_yourself(y_true, y_pred):
    y_pred = T.clip(y_pred, epsilon, 1.0 - epsilon)
    y_pred /= y_pred.sum(axis=-1, keepdims=True)
    cce = T.nnet.categorical_crossentropy(y_pred, y_true)
    return cce

などと指定する(参照ページ)。

その他

モデル圧縮、入力のノーマライズドロップアウト、転移学習、weight decayなどの手法に触れていない。

機械学習のベストプラクティスの資料のメモ(Best Practices for ML Engineering)

Google researchの Martin Zinkevich氏の資料です。

Reliable Machine Learning in the Wild(NIPS 2016)での招待講演のもの。

Rules of Machine Learning: Best Practices for ML Engineering

Reliable Machine Learning in the Wild

XGBoostで自分で設計した目的関数(objectiveを自分で定義)で回帰を行う

やること

xgboostの目的関数を定義済みのものから自分で定義したものに変える。 回帰は常に 正解ラベル=予測の平均値 だったらいいのだけれど、予測を外したらまずいケースも現実問題では存在する。 なので、予測を外したらダメなケースだけは特にペナルティを大きくした目的関数を自分で定義したかった。 今回は練習でQuantile Regressionをxgboostを使って行う。

Quantile Regression

Koenker, Roger. Quantile regression. No. 38. Cambridge university press, 2005.

イメージ

f:id:misos:20170122001713p:plain

赤実線以下のサンプル(正解ラベルよりも予測値の方が大きいケース)をなくしたい。 なので非対称(asymmetric)な損失を自分で定義してモデルを作りたい。 Quantile regressionはすぐ実装できそう。

scikit-learnのGradientBoostingでの実装

scikit-learnのGradient Boostingのオプションとして選択可能。アルファの値で罰則項の値のバランスを指定する。 scikit-learnでここ以外でQuantile Regressionを目にする機会ない気がする。

class QuantileLossFunction(RegressionLossFunction):
    """Loss function for quantile regression.
    Quantile regression allows to estimate the percentiles
    of the conditional distribution of the target.
    """

    def __init__(self, n_classes, alpha=0.9):
        super(QuantileLossFunction, self).__init__(n_classes)
        assert 0 < alpha < 1.0
        self.alpha = alpha
        self.percentile = alpha * 100.0

    def init_estimator(self):
        return QuantileEstimator(self.alpha)

    def __call__(self, y, pred, sample_weight=None):
        pred = pred.ravel()
        diff = y - pred
        alpha = self.alpha

        mask = y > pred
        if sample_weight is None:
            loss = (alpha * diff[mask].sum() -
                    (1.0 - alpha) * diff[~mask].sum()) / y.shape[0]
        else:
            loss = ((alpha * np.sum(sample_weight[mask] * diff[mask]) -
                    (1.0 - alpha) * np.sum(sample_weight[~mask] * diff[~mask])) /
                    sample_weight.sum())
        return loss

scikit-learn/gradient_boosting.py at master · scikit-learn/scikit-learn · GitHub

sample_weightの重み分だけ正解ラベルのとの差が0以下と以上のサンプルで alpha(1.0 - alpha)だけ罰則が科される。

XGBoostの目的関数を変更する

実装のサンプルでは

def objective_function(preds, dtrain):
    ....
    return grad, hess

dtrainxgboost.DMatrix のデータ。gradとhessが以下の論文のGとHの部分に対応している、はず。

Chen, Tianqi, and Carlos Guestrin. "Xgboost: A scalable tree boosting system." Proceedings of the 22Nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2016.

目的関数

def quantile(preds, labels):
    alpha = .8
    N = preds.shape[0]
    O = np.zeros(N)+1
    
    mask = labels > preds
    grad = ((alpha * mask) - ((1.0 - alpha) * (1-mask))) * labels 
    hess = O
    
    return grad, hess

hessは固定で予測値が正解を下回った時にalphaをかけるように変更。 このあともうちょっと目的関数をクロスバリデーションしながら調節。

結果

入力データは 0 ~ 40の乱数xとxに対して多項式で従う特徴を50個くらい適当につけたもの。

f:id:misos:20170122002539p:plain

赤実線以下のサンプルがほとんどなくなったことがわかる。残りの誤差が大きいデータは適当なアンサンブルを作ってカットすればいい、かな?

他の目的関数

問題によって適宜変更する必要あり。

paper.hatenadiary.jp