2018年2月23日金曜日

リストの和のリストのアルゴリズム

\(A=[a_1, a_2,a_3 ...]\)というリストあって,\(s_n = \sum_{i=1}^n a_i\)として,\(S=[s_1, s_2, s_3,...]\)というリストを新たに作りたいとする.うっかりしているとリスト内包表記を使えば早かろうと思って

def ls_comp_sum(A):
    length = len(A)
    return [sum(A[:i]) for i in range(length)]

と書いてしまったりするが,forループを使って,

def for_sum(A):
    result = [arr[0]]
    length = len(arr)
    for i in range(1, length):
        result.append(result[-1] + arr[i])
    return result

としたほうがずっと早い(Dynamic Programmingというらしい).

2018年2月21日水曜日

論文読み 2017, Data Distillation: Towards Omni-Supervised Learning

Data Distillation: Towards Omni-Supervised Learning, Radosavovic et al.

semi-supervised learningについての論文. ここでは正解データ(annotation)の付いた教師データを"ラベルありデータ",付いていない教師データを"ラベルなしデータ"と呼ぶことにする.
著者らは,ラベルありデータを最大限活用しながら,インターネット経由で得られるようなほとんど無尽蔵のラベルなしデータをも使って学習するモデルをomni-supervised learningと呼んでいる. 著者らは,ラベルありデータで学習してからラベルなしデータに推測を行い,その推測を仮のラベルとしてラベルなしデータについても学習を行うとしている.このとき,ラベルなしデータに対して様々なtransformation(回転,反転 など)を行った結果を統合した結果の推測をensemble(統合)したラベルを仮のラベルとすることで,Hinton et al.[^1] の提案した Model Distillationと似たことが行えると著者らは主張しており(fig.1),これをData Distillationと名付けた.

enter image description here
figure 1. 上:Hinton et al[^1] のモデル, 下: 著者らのモデル

こうしたモデルは古くからあるが,近年の教師あり学習モデルの性能向上によって現実的になってきたとしている.
著者らはMask R-CNNを,リスケーリングと左右反転をtransformationとして,Data Distillation を使って学習させ,keypoint detectionとobject detectionで,supervised learningよりも良い結果を得た

2018年2月20日火曜日

deformable convolutionを試す

Dai, Jifeng, Haozhi Qi, Yuwen Xiong, Yi Li, Guodong Zhang, Han Hu, and Yichen Wei. 2017. “Deformable Convolutional Networks.”pytorch実装を試した.
条件は付属のcifar10に対するテスト(torch_deform_conv/cnn.pyとtests/test_deform_conv.py)にdropoutを加える以外はそのまま流用し,通常のconvolutionとdeformable convolutionを比較した.

結果

dropout率0.5の場合
dropout率0.5の場合.

training lossはnegative log likelihood. deformable convolutionのtraining errorは通常のconvolutionの場合よりも低くなる一方で,generalization errorはわずかに収束が早まるだけのようだ.

enter image description here
dropout = 0.0, 0.25, 0.50(それぞれ緑,黄色,赤)のときのgeneralization error. Early stoppingすれば差はない.cifar-10では対象物が画像の中央に大きく写っているので,deformable convolutionの効果が薄いのかもしれない.
convolution 4, fully-connected 1の単純なモデルだが,deformable convolutionの場合,100 epochを回すのに5時間以上かかった. この実装は実用に耐えないようだ.
こちらの実装はcudaを使っているので速そう.そのうち試したい.