扁桃腺摘出手術を受けた

口蓋扁桃の摘出手術を受けて7日入院したときの記録。

手術を受けた理由

直接の引き金は先月初旬に扁桃腺炎で40度以上の熱を出し入院したこと。以前から1年に何度も扁桃腺炎になっていた。喉の痛みからはじまり高熱というパターン。最悪の場合は悪化して抗生剤点滴のため入院となる。年に1-2回入院していると思う。過去にも医師に摘出をすすめられたが出血などのリスクが怖くて断っていた。その代わり以下の予防に命をかけていた。

  • 頻繁なうがい。出社、帰宅時はもちろん。トイレで手を洗うときはうがいもする。
  • 通勤時のマスク。これは他者のくしゃみや咳からの予防目的ではない。マスクを付けていることで、自分の手が鼻や口などの粘膜に物理的に触れなくなる。つまり自分の汚い手からの感染を防ぐのが目的。
  • 睡眠
  • 加湿。家には加湿器が2台あり冬場はフル稼働である。
  • 喉の腫れや痛みを感じたらすぐに病院に行き、必要があれば抗生物質を処方してもらう。(今回はこれでも悪化してしまった)。

にも関わらず何度も扁桃腺炎になる。これが以下の2方面で辛かった。

虚弱問題

ネットで扁桃腺摘出体験ブログを読むと大体同じことが書いてある。手術後に、体感で風邪の引きやすさが 1/10 くらいになるらしい。また喉が痛くなる風邪を引いても2-3日でほぼ良くなる。「これが一般人の引く風邪なのか!」と思うらしい。そんなめぐまれた一般人の人たちから見ると、扁桃腺炎にかかってワンシーズンに1-2回。高熱で1週間くらい寝込む人たちは、虚弱体質に見える。もしくは本人の予防努力(もしくは気合)がたりないというレッテルを貼られてしまうのだ。また時には、完全に好意から謎の民間療法をすすめられたりする。これらは地味に辛い。

予定たてられない問題

いつ扁桃腺炎になるか分からないので予定を立てられない。もしくは予定を入れるのがとても不安。覚えているだけでも

  • 昨年の夏。息子とのキャンプの直前に入院。
  • 今年イタリア旅行の前に発熱。

などでやらかしている。家族や知人に迷惑をかけるのが怖くて色々断りがち。仕事の海外出張も怖い。「もし出張中に発症して悪化したら?」「アメリカの病院に行くの?」「入院したら法外なお金かかる」などの不安がつきまとう。その不安がストレスになり扁桃腺が腫れたこともあった。

手術と入院の記録

ツイートしていたものをそのまま貼っておく。

  • Day1: 麻酔科医と看護師さんの説明を受ける以外は今日は何もなし。看護師さんも口蓋扁桃とったらしい。痛いですよー😉と言われた。
  • Day2: 朝から手術。全身麻酔なので記憶なし。終了後3時間安静。痛さは扁桃炎マックスの時と同程度なので耐えられる。血の混じった痰をできるだけ優しく外に出すのが難しい。痛みと麻酔後なので夜までひたすら寝るのみ。同室で同じ手術を受けた人はもっと痛そう。
  • Day3:術後最初の食事。重湯、具なしコンソメスープ、牛乳、りんごジュース。喉の奥に違和感あるが意外と飲み込めるものだ。体調はかなり楽になったが、邦画を見るのはOKだが、もっと頭を使う洋画や読書はしんどい感じ。夜は痛みで寝られず痛み止めをもらった。まだ大きな声ではしゃべれない。
  • Day4:食事がお粥に。スパルタで焼き魚も。全ての薬が経口薬になり点滴とさようなら。術後はじめてシャワー気持ちよかった。矯正のリテーナを長めにつける。英語コンテンツも見られるくらい良くなった。まだ飲み込むと痛い。唾液に血が混らなくなった。家族がお見舞いに来てくれた。ありがたい。アメリカの友人や同僚に「扁桃腺手術ならアイスを食え」と言われたので実践。確かに患部周辺がひんやりして気持ちいい。
  • Day5:食事がお粥から通常のご飯へ。喉の痛みも気持ち穏やかに。読書をする余裕が出てきた。メモの魔力読み中。Switchのウィッチャー3プレイ中。良い意味でリアルなお使いゲーム。さすがに暇なので洗濯して衣類をきれいにたたむなど時間つぶし。この時期に出血のリスクがあるので油断せずに休まないと。
  • Day6:喉の痛さや違和感以外は、全て正常になったように感じる。喉の奥のかさぶたが自然に優しく剥がれれば吉。運悪く一気に剥がれると出血→再手術。というようなことがおきやすいのが今日明日らしい😬。安静にする。そういえば新しいスマホのセットアップは時間をつぶせてよかった。
  • Day7:喉の痛みがさらに良くなった。痛み止めを飲まなくても食事ができる。予定では明日か明後日退院。シャバに出ても運動や固い食べ物などは禁止。
  • Day8:無事退院🎉

追記2020年5月

その後どうなったか。 - 術後の喉の違和感は完全になくなった。つっぱる感じや痛みもない。もちろん出血もない。 - 一度も高熱をだしていない。ただしコロナのせいで家にいたのも大きいと思う。 - 喉が痛かったことは2回あった。ちょっとした痛みで翌日にはなくなっていた(以前なら扁桃腺炎コースだと思う) - 咳、鼻水をともなう風邪はまだ一度もひいてない。

IEEE-CIS Fraud Detection コンペ反省会

IEEE-CIS Fraud Detection コンペに参加。チームとして銀メダルをとりめでたく Kaggle Expert になった。コンペは名前の通り Credit Card のトランザクションを fraud or not に分類するもの。

時系列

  • Table コンペだが Time Series データなのに不安を覚えつつ EDA 。いくつか EDA カーネルを見る。
  • Local CV どうしようかまよったが、まずは KFold で End to End モデルパイプラインを作った。LightGBM。
  • 最初の End to end モデルは動けばよいの categorical features は無視して数値データのみで。
  • KFold の Local CV データを眺めながら label encode するなど。must 的なものをやる。
  • 某氏とチームを組む。初心者と言っていたがみるみる着実に歩を進めるので尊敬しかない。
  • 某コンペ時に count encoding を知らず。「モデルにはそのままだと count 見えないのよ」というありがたいスレッドで勉強になった教訓。それを踏まえて count feature の EDA を意識的にやっていた。
  • 自分で1から作っていたカーネルがいまいち伸び悩んでいたので、public kernel を fork して自分の学びを足す方向で進めた。結果的にこの判断は正しかった。
  • 同額の TransactionAmt の count encoding などをあれこれ EDA しつつためす。このころ 0.94 は 0.93 付近?
  • チームマージ
  • チームマージで似たようなスコアだけど、全く出自(feature engineering) が違うモデルが増えた。
  • チームの誰も手を出してなかった NN モデルを Torch でササッと書いた。過去の経験から GB よりスコアが劣るのはわかっていたが Ensemble で効果があるので。
  • GMEAN of low correlation カーネルでチームの submissions を ensemble してみたら一気に銅メダル圏内。
  • GMEAN of low correlation カーネルをちゃんと読み込んできちんと適用したら銀メダル圏内に到達。
  • 最終日まではあたらしい feature ためす。スコア上がったら Ensemble の繰り返しだった。
  • Final submissions は shake up/down が怖かったが、チームで相談して best score kernels とした

ほか

  • 自分の記録を kibela から Google Docs に移行した。理由は markdown を書くのが面倒になったから。あとどのデバイスからでもかんたんにアクセスできるから。
  • 途中の GPU 制限には本当に困った。
  • seaborn の勉強をしたことで EDA 苦手意識がかなりへった。やはり美しく表示されるとうれしい。
  • 上とすこし矛盾するけど。汚いコードでもいいからグラフを書いて、学びを得る。そのコードは捨てるが学びはとる。お気楽姿勢にして気が楽になった。
  • kaggle api 使って git でコード管理するのを後半から導入して大変良かった。
  • feather で特徴管理みたいなのは、まだ僕のレベルでいらないかも。

さあ Master めざす?

APTOS 2019 Blindness Detection コンペ反省会

失明にいたる病気を眼の画像から判定する(5段階)コンペ。初めての画像コンペ。画像コンペでは大きくマシンリソースを使うというイメージで敬遠していたがそこまでもなかった。チームで挑み結果は804/2987。public から375もランクダウン。Shake up の原因と対策はあとでまとめる。

学び

PyTorch

コンペの途中で Keras が deterministic results を出してくれないことに悩み PyTorch にスイッチ。PyTorch 公式のチュートリアルを写経するだけで十分だった。以前から PyTorch カーネルを読み込んでいて一番気になったのが train 時に back prop の伝播の一部を明示的に書かないといけないこと。やってみたらそれほど気にならなかった。それよりも PyTorch API と画像コンペとの相性のよさが際立っていた。これまで Tensorflow -> Keras -> PyTorch と流れてきたが PyTorch がちょうどよい。Define by Run も気軽で良い

ただ気になっていたのが高 Score Kernel が fast.ai で書かれていたことだ。次の波が来ている?

Augmentation

CNN などでの画像分類において training data が少ない場合に argumentation が効く。という教科書的な知識はもちろん知っていたが。どう apply するのか全くわからず困惑した。rotation の角度の範囲は?horizontal/vertical flip が起こる確率はいくつが良いのか? augmentation は組み合わせるもの?単体で使うもの? training epochs への影響は?など分からないまま後半に突入してしまった。上位カーネルで勉強したいところ。

4th solution によれば

Augmentations We used a lot of augmentations, at least more than I ever used before :) All from the wonderful albumentations library: Blur, Flip, RandomBrightnessContrast, ShiftScaleRotate, ElasticTransform, Transpose, GridDistortion, HueSaturationValue, CLAHE, CoarseDropout. とのことだったので知識も手数も足りなかった模様。

Ensemble

Ensemble が手元でほとんど効かなくて困惑した。まだ原因がわかっていない。

チーム

チームでやってみて良かったのは、各人の「やって当たり前」の前提が違うこと。例えば D 氏はとりあえず論文をいくつか読んだから実装してみる。と言って僕を驚かせた。自分は Discussion 読んで Kernel を書いて手を動かしがちなのとは対象的だ。M氏はクラウドリソースを用意してくれて、それがいかに素晴らしいものか教えてくれた。何度作業効率の上がることか。あとチーム内で最高スコアのカーネルをぱっと出してくれたのも M 氏である。コミュニケーションはまだまだ課題があると思った。チーム doc を用意したが最低限しか機能してなかったように思う。

コミュニティへの貢献

このコンペは submission がコケたときにヒントが少なすぎるという問題があって多くの人がハマっていた。How to debug "Kernel Threw Exception" with binary search というトピックでデバッグ方法を書いたら評判が良く、コンペ運営側の目にもとまって紹介されたのは良かった。上位ランカーがどこかで書いていたが、コミュニティーに自分の学びを共有すると結果的に自分が成長するということがよくあるらしいのでがんばりたい(因果関係かどうかはわからないけど)

反省

いまだに自分の時間をどう配分するかに迷いがある。順位が振るわないので改善の余地があるのだと思う。自分の書いたカーネルにこだわりすぎたのは本当に良くない。public kernel を少し改造しただけのもののほうが Score が良かった。時間のなさを言い訳にしたくなるが Neuron Engineer 氏は3歳のお子さんがいるらしいので。

pseudo-labeling を学ぼう。

top solution からのメモ

  • pseudo labeling
  • Downsampling
  • (480, 600) など。各種データサイズを試している。

```` Compose([ BensCrop(img_size), #from 2015 solution RandomHorizontalFlip(), RandomVerticalFlip(), RandomRotation*1, ), ])

for EfficientNet B5 Compose([ Resize(img_size), HorizontalFlip(), VerticalFlip(), Rotate(), RandomContrast(0.5), IAAAdditiveGaussianNoise(p=0.25), ]) ````

train_transform = transforms.Compose([ transforms.ColorJitter(brightness=0.45, contrast=0.45), transforms.RandomAffine(degrees=360, scale=(1.0, 1.3)), transforms.RandomHorizontalFlip(), transforms.RandomVerticalFlip(), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])

*1:-120, 120

Jigsaw Unintended Bias in Toxicity Classification 記録 - Kaggle

Jigsaw Unintended Bias in Toxicity Classification | Kaggle に取り組んだときの感想。コンペは終了していないが submission の受付が完了。ランキング発表を待つだけなので忘れないうちにメモを残す。

過去に経験のある text の classification 系。LSTM, GRU などがすぐに解法として浮かぶ。今回は benchmark となるカーネルが公開されていたので、そのカーネルにスコアで並ぶまでは discussions / kernels を見ないと決めて取り組んだ(=他人の解法やヒントを見ずにある程度自分だけで進める)。これは良い決断だったと思う。また kibela に自分しか見られないメモを書いてスコアや進捗を管理した。kernel の stdout も kibela に貼ることを前提の format とした。

時系列

  1. 過去に書き溜めたコードから end to end で動くカーネルを作る
  2. text preprocessing と model の両方から benchmark カーネルに少しずつ近づく
  3. benchmark kernel に追いついたあとは discussions / kernels を丁寧に読みはじめる
  4. target だけではなく別の指標もモデルの output ととして training する multi output モデルに感心。勉強になった。
  5. レーニング時間を短くするために任意長の text を input として使えるようにモデルを修正。keras の fit_generator で動かすのに苦労する。苦労が報われてかなり短縮。
  6. この時点で keras よりも torch の方を使う kernel が多くやきもきした。時間がないので torch はこのコンペでは追わないことを決断。
  7. public kernel の best score が超えられなかったので自分の実装を捨てて keras best score カーネルをもとに改善していくことに。
  8. 細かい改善で向上するが決め手にならず。
  9. 期日が近づき始めたので training と prediction の kernel を分けることに。embedding を model save/restore に含めない部分が初めてだったので慎重に実装。
  10. ↑で model restore が簡単になったので ensemble に着手。LSTM, GRU ベースの model を average するだけでスコア向上。
  11. 無視していた bert に着手。例の vanila kernel を理解して training 時間の短縮などに取り組み。LSTM model より高スコアに。fine tuning するだけであっというまに LSTM モデル超え。
  12. ensemble すると一気にスコアが向上
  13. Stacking を試してみたが prediction にそれなりに時間がかかるわりにスコアは上がらず。xgboost のチューニングの問題かもしれない。
  14. XlNet が出たが流石に間に合わないだろうと諦め。
  15. そうこうしているうちにタイムオーバー。最高スコアのものを 2 つ提出した。

どうやったらもっと上に行けたか?

  • チームを組む(これは作戦を考え中)
  • 各入力の loss weight の深掘り。

結果

  • 288/3,167 in public LB
  • 終結果はまだ未確定

最近の読書

「凍りのクジラ」、「旅人」、「羊と鋼の森」が特に良かった。今年は当たりが多い。


凍りのくじら (講談社文庫)

凍りのくじら (講談社文庫)

旅人  ある物理学者の回想 (角川ソフィア文庫)

旅人 ある物理学者の回想 (角川ソフィア文庫)

首折り男のための協奏曲 (新潮文庫)

首折り男のための協奏曲 (新潮文庫)

スコーレNo.4 (光文社文庫)

スコーレNo.4 (光文社文庫)

太陽のパスタ、豆のスープ (集英社文庫)

太陽のパスタ、豆のスープ (集英社文庫)

たった、それだけ (双葉文庫)

たった、それだけ (双葉文庫)

終わらない歌 (実業之日本社文庫)

終わらない歌 (実業之日本社文庫)

よろこびの歌 (実業之日本社文庫)

よろこびの歌 (実業之日本社文庫)

時を刻む湖――7万枚の地層に挑んだ科学者たち (岩波科学ライブラリー)

時を刻む湖――7万枚の地層に挑んだ科学者たち (岩波科学ライブラリー)

羊と鋼の森 (文春文庫)

羊と鋼の森 (文春文庫)