티스토리 뷰
이번 달의 What are you reading!
Batch size vs Learning rate
Effect of batch size on neural net training
- https://medium.com/deep-learning-experiments/effect-of-batch-size-on-neural-net-training-c5ae8516e57
요약
- 배치 사이즈를 K배로 키우고 다른걸 안 건드리면 한 배치내 example들의 Sum of gradient norm 은 K배보다 작다. 사실 당연한 부분 (모든 example의 그래디언트가 같은 방향이어야 겨우 K배랑 같아지니까). 즉 AVG(gradient) 가 아니라 SUM(gradient)를 학습에 사용해도 학습한 데이터의 총량이 같으면 업데이트에 사용된 그래디언트 norm의 합이 더 작을 거라는 얘기
- 참고로 batch size가 K면 K개의 example 각각에 대해 gradient g1, g2, ..., gk 가 있을텐데, 해당 배치를 업데이트할 때 SUM(g1, ..., gk) 를 쓸지 AVG(g1, ... , gk)를 쓸지도 개발자가 정해야 하는 부분이긴 하다. 물론 대부분의 경우 디폴트는 AVG(g1, ..., gk) 를 쓴다 (K개 그래디언트를 모두 더한 뒤 배치 사이즈를 나눈 걸 모델 업데이트에 사용)
- 이로 인해 발생하는 문제는 1. 최종적으로 모델이 수렴한 parameter point가 원래 initial weight에서 가까울 수 밖에 없다(멀리 못가니까) 2. sharp minima에서 탈출하기가 어려워서 unstable한 solution으로 수렴한다 (따라서 최종 성능이 더 안좋다).
- 근데 이걸 learning rate를 적절히 키워줘서 그래디언트 norm 크기를 강제로 늘려주면 어느정도 완화할 수 있다. 키우는 법은 역시 linear scaling.
- 널리 알려진 사실과 다른 내용은 없는데 직접 간단한 데이터셋에 실험 돌린 뒤 수치로 보여줘서 좋다.
Effect of batch size on training dynamics
요약
- TODO
Optimizer
Effect of gradient descent optimizers on neural net training
요약
- 크게 놀라운 내용은 없고, 어느 옵티마이저를 사용하든 learning rate나 다른 하이퍼파라미터들을 튜닝할 필요성이 있다는 내용.
- 이것도 알려져 있지만 well-tuned SGD는 Adam 이나 다른 옵티마이저를 이길 때가 종종 있음
Activation Function
Reproducibility in deep learning
요약
- TODO
Numerical feature embedding
On Embeddings for Numerical Features in Tabular Deep Learning
- https://arxiv.org/abs/2203.05556
- https://www.reddit.com/r/MachineLearning/comments/tg4agu/r_new_paper_on_tabular_dl_on_embeddings_for/
요약
- 보통 tabular deep learning 에서 numerical features는 그냥 real value 그대로 넣거나, 아니면 bucket을 나눠서 구간별로 독립적인 임베딩을 할당해서 넣어주거나 하는데 각각 문제점이 있음. 트랜스포머 같은 모델은 각 feature가 임베딩이 돼야 되므로 real value 그대로 넣는 방식을 쓸 수 없고, bucketizing 은 인접한 feature value 끼리의 유사성이 반영되지 않는 방식임.
- 이 논문에서 새로 제안하는 방식은 해당 numerical feature는 T+1개 구간으로 bucketizing 한 뒤(즉 실수 구간을 b_1, b_2, ..., b_T 를 경계로 쪼개서 어느 구간에 속하는지를 봄), 구간별 임베딩을 어떻게 주냐면 feature value x가 b_i <= x < b_{i+1} 인 경우 임베딩을 [1, 1, 1, ...., (x - b_i) / (b_{i+1} - b_i), 0, 0, ..., 0] 으로 쓰자는 것.
- 이렇게 하면 자기보다 낮은 feature value가 가진 성질을 cumulative하게 가져간다는 직관적 해석이 가능해보임. 또 다르게 생각하면 이런 성질이 만족되는 numerical feature 에서만 사용해야 할듯?? 예를 들어서 음수나 0이 뭔가 특별한 의미를 가지고 있으면 쓰기 어려울 것. 즉 x1 < x2 인 경우 특정 feature가 x1일 때 가지는 성질은 x2일 때도 가지고 있어야 유의미한 해석이 가능해보인다.
- 해당 논문 저자가 예전에 올린 RTDL 도 꽤 읽을만 했던 기억.
Continuous (continual) Training / Concept(data) drift
Online Learning for Recommendations at Grubhub
추천시스템 같은건 그날그날 유저 행동이 달라지기 때문에(concept drift) 실시간으로 쌓이는 데이터를 모델에 잘 적용해야 하는데, 데이터의 timestamp를 explicit하게 input으로 넣는게 아니라 그냥 최신 데이터를 마지막에 학습하는 식으로 모델의 최신성을 관리하는 경우 어떤 식으로 최신 데이터를 consume 할지가 좀 골치 아프다. 그냥 새로 들어오는 데이터를 순서대로 넣기만 하면 뭔가 너무 오버피팅 되기도 하고, 그렇다고 과거 데이터를 좀 섞어 넣으면 data distribution 이 왜곡되고... 좀 좋은 방법이 있는지 다른 회사는 어떻게 하는지 궁금했는데 마침 그런 주제 논문이 있어서 읽어 봤다. 근데 별 내용도 없고 타고 올라가서 읽을만한 레퍼런스도 부실해서 실망
요약
- 근데 별 내용은 없고 그냥 날마다 정해진 time window size 에 맞게 추가 training 을 했다고 합니다~ 끝!
- 추가 training 을 하는 방법은 1) '그냥 모델을 처음부터 다시 최근 N일 데이터로 학습한다' 2) '어제의 production model에서 warm start를 해 최신 N일 데이터를 적절히 잘 넣어준다' 이렇게 두가지일텐데 후자는 이미 본 데이터를 덜 봐도 된다는 장점이 있으므로 후자가 더 나았다는 내용
Real-time machine learning: challenges and solutions
위의 논문에 레퍼런스로 달려 있던 블로그 글이다. Production ML system에서 고려해야 하는 두가지 문제(online real-time serving, continual training)에 대한 문제 정의와 접근 방안은 잘 정리되어있는데, 역시나 크게 새로운 내용이나 standard approach 같은건 나와 있지 않다 ㅠㅠ. 보면 stateless / stateful continual training을 구분해뒀는데, stateful continual training에서 발생하기 쉬운 문제들에 대한 솔루션 같은게 딱히 적혀 있지 않아 아쉽.
CS 329S: Machine Learning Systems Design
TODO
CTR Modeling Architecture
CAN: Feature Co-Action for Click-Through Rate Prediction
추천시스템에서 여러 feature간의 high-order interaction을 고려하는 가장 naive한 방법은 아예 cross feature를 만들어서 해당 cross feature의 item pair 마다 독립적인 임베딩을 할당해주는 것이다. 예를 들어서 '과일의 원산지' 라는 feature가 있고 '과일 종류' 라는 feature가 있을 때, 특정 국가의 특정 과일이 더 맛있는 경향이 있다면 두 feature간 second-order interaction을 잡아내면 성능 향상에 도움이 될 것이다. Naive approach의 경우 (태국, 망고) 라는 item pair가 들어오면 아예 E_{thai && mango} 라는 새 임베딩을 할당할 것인데, 이 방식의 문제점은 1. 임베딩 개수가 너무 많이 늘어나고 2. 비슷한 item pair간 정보 공유가 되지 않는 점(E_{thai && mango} 와 E_{thai && banana} 는 둘 다 국가가 태국이지만 서로 독립적으로 학습되기 때문에 정보 공유가 되지 않는다)이다. 그래서 추천시스템 모델링은 각 feature 별 임베딩을 할당하되, 그 상호작용은 f(E_thai, E_banana) 로 나타내고 중요한 상호작용을 놓치지 않으면서도 practical한 계산량을 가지는 f를 찾는 것이 목표가 된다.
또 한가지 중요한 점은 보통 이런 모델의 input에는 user behavior sequence가 들어오기 마련인데 (구매내역 등) 이 sequence의 개별 item embedding들에 대한 interaction을 어떻게 다루는지이다.
요약
- 좀 대충 읽긴 했는데, 여기서는 관심 대상 feature pair는 (유저 구매내역의 개별 아이템, 광고 후보상품) 이렇게 고정한 다음, f(E_a, E_b) 를 어떻게 하냐면 E_a를 kernel weight로 가지는 MLP에 다가 E_b를 통과시키는 것으로 f를 정의했다(!!!!). 위의 예시를 다시 가져오면 국가별로 작은 MLP submodule을 만들어서 거기에 과일종류 임베딩을 통과시키는 셈이다. 자유도가 높을 것 같긴 한데 실제로 좋을지는 써봐야 알 것 같다.
'학업' 카테고리의 다른 글
시스템 디자인 (0) | 2022.04.03 |
---|---|
원소 추가, 삭제, 중간값 찾기 쿼리 (0) | 2020.09.08 |
ACER: Sample Efficient Actor-Critic With Experience Replay (2) | 2019.06.18 |
Pairwise / Triplet Loss (3) | 2018.09.12 |
Squeeze-and-Excitation Networks (0) | 2018.08.13 |
- Total
- Today
- Yesterday
- grub window ubuntu
- grub 윈도우 인식
- 윈도우 7
- DMV
- grub 우분투 인식
- 우분투 윈도우 멀티부팅
- 우분투 14.04
- boot-repair
- 미국면허
- 레드우드시티
- 캘리포니아
- 우분투
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |