Thursday, February 15, 2018

논문 리뷰 - Learning to pinpoint singing voice from weakly labelled examples (ismir 2016)




오늘 볼 논문은 ISMIR 2016에서 best oral presentation을 받은 논문입니다. (링크)

여러 번 참고할일이 있었던지라 정리 목적으로 올립니다. 이 논문의 저자는 오스트리아에서 음악쪽으로 딥러닝 연구를 쭉 해온 Jan Schluter입니다. 최근에 박사 졸업을 했죠. Lasagne 개발에도 적극적으로 참여한 사람입니다.

이 논문은 연구와 엔지니어링이 반반 섞여있는 재밌는 논문입니다. 그리고 각 모듈을 소개한 섹션 3을 Ingredients, 이를 조합한 알고리즘을 섹션 4 Recipe라고 이름을 붙였네요. 

문제 정의

전형적인 weakly labelled learning중 하나죠. 음악은 대체로 트랙 전체로 라벨링이 많이 됩니다. 예를 들어 특정 곡에 보컬 유무를 퉁으로 라벨링하는거죠. 그리고 이렇게 라벨링된 데이터를 이용해 프레임마다 보컬 유무를 찾는것이 주어진 문제입니다.

방법으로는 Saliency map과 knowledge distillation (논문에서는 multiple-instance learning이라고 표기)을 사용했고 기본적으로 컨브넷을 사용합니다.

3. 재료

3.1 보컬 탐지용 컨브넷

오디오: 22050 Hz로 다운샘플링한 뒤에..

X = abs(STFT(X, n_fft=1024))
X' = log(1+X)

를 하고 추가적으로 전체 주파수 대역 중 저주파수(8kHz까지, 총 372 주파수 빈)만 이용합니다. 보컬 에너지가 분포하는 대역을 고려한 전처리입니다.

컨브넷 구조를 봅시다. 참, 튜플은 (time, frequency)순서입니다. 그리고 모든 컨브넷은 바운더리에서 'valid'로 설정되어있습니다. Batch normalization이 모든 레이어에 적용되고 액티베이션은 LReLU(alpha=0.01)을 사용했습니다. 

conv1 = Conv2d(64, 3, 3)(input) // 입력은 372 주파수 빈
conv2 = Conv2d(128, 3, 3)(conv1)
mp1 = MP2D(3, 3)(conv2)
conv3 = Conv2d(128, 3, 3)(mp1)
conv4 = Conv2d(64, 3, 3)(conv3) // 주파수축이 118개가 됨
conv5 = Conv2d(128, 3, 115)(conv4) // 주파수 축이 4개가 됨
mp2 = MP2D(1, 4)(conv5) // 주파수 축이 1개가 됨
dense1 = Dense(256)(mp2)
dense2 = Dense(64)(dense1)
output = Dense(1, activation='sigmoid')(dense2) // 출력


conv1, conv2의 결과로 (5, 5)크기의 보컬 패턴을 탐지합니다. 그리고 conv3, conv4가 이를 조합하죠. conv5는 최종적으로 주파수축에서 쭉 모으는 역할을 합니다. 사실 여기서 바로 conv2d(128, 3, 118)을 해서 주파수축 길이를 1로 만들어줘도 결과는 비슷할것같지만, 여기에서는 그렇게안하고 max-pooling을 한번 더 했습니다.

학습과정에서는 pitch-shifting, time-stretching을 적용해 데이터를 키웠습니다. 그리고 모델의 시간축 크기는 1.6초밖에 안됩니다 (115프레임). 그런데 사용한 데이터는 30초길이입니다. 따라서.. (다음섹션!)

3.2 Multiple-instance learning

전체 음원(30초)의 라벨을, 랜덤으로 선택한 1.6초에 그대로 적용하고 이를 이용해 학습합니다.

비슷한 방법으로 위의 코드를 거의 그대로 사용하지만, 입력을 1.6초가 아니라 30초 전체를 받고 모델 막바지에 시간축으로 길게 max-pooling을 하는 방법도 있겠죠. prediction 관점에서 보면 그게 맞습니다. 30초중에 어느 구간이건 보컬이 존재하면 activation이 크게 일어날테고, 따라서 보컬이 존재한다고 판단하면 되니까요. 그렇지만 max-pooling 레이어는 backprop에서 따져보면 가장 입력이 크게 들어온 곳으로만 gradient가 흘러가는데 이렇게하면
 - 데이터 및 연산 관점에서 비효율적입니다: 왜냐하면 forward pass에서는 30초 구간을 전부 이용하지만 backward pass에서는 1.6초의 정보만 이용하기 때문입니다.
 - 오버피팅이 일어날수 있습니다. 본문에는 조금 대충 적어놓았는데, 일단 데이터 활용 관점에서 비효율적이므로 오버피팅에 취약하겠죠. 최악의 경우 각 곡마다 계속 같은 1.6초 구간을 사용하게 되면 전체 트레이닝 데이터가 (* 1.6/30)으로 줄어드니까요.

본문엔 없지만, 장점은 없을까요? 보컬이라는게 30초에서 일부만 나타나게 마련인데, 이렇게 하면 학습에서 자연스럽게 보컬이 존재하는 구간을 선택하는 장점이 있을것같습니다. 다만 30초에서 1.6초는 너무 짧으니 만일 prediction rate이 1/1.6초 라면 3.2초나 4.8초를 입력으로 사용하는식의 방법은 어떨까싶네요.

3번째 문단이 중요한 내용인데.. 이제 논문이 조금 산만하게 쓰여진것같다는 생각이 드는군요. 일단, 1.6초짜리로 개별적인 학습을 진행하되 최종적으로 출력한 예측값 중 negative는 확신을 갖고 사용하되 (왜냐면, 30초 전체가 non-vocal이라면 그 중 어떤 1.6초를 골라도 non-vocal이니까요) positive는 (30초중 사실은 일부만 vocal일것이므로) 더 엄한 잣대를 적용해서 vocal로 판단하는거죠. 그리고 이렇게 prediction한것을 새로운 라벨로 생각하고 다시 학습을 진행하는 것 (~= knowledge distillation)입니다. 아니, 본인이 뒤에서 활용한 방법인데 이렇게 마치 참고사항처럼 말하고 지나가다니! 여러분은 이러지 않길 바랍니다.

3.3 Saliency mapping


Saliency mapping 은 입력신호 중 어떤 부분이 최종 prediction에 끼치는 영향을 표시하는 것입니다. 본문의 그림 1에서 (d)를 보면 됩니다. 즉, 보컬이 있다고 판단을 내리는데에 큰 영향을 끼친 부분을 강조해서 표시하는거죠. 약간 스포일러가 나오는데, 입력 스펙트로그램인 1-(a)와 이걸로 구한 saliency map인 그림 1-(d)를 비교해보세요. 꼬불꼬불한 선만 남죠? 학회장에서 데모로도 보여줬는데, 결국 이 보컬 디텍터는 꼬불꼬불한 선; 즉 주파수 모듈레이션, 즉 바이브레이션, 혹은 일정하지 않은 피치를 보여주는 하모니를 찾습니다.


4. RECIPE

4.1 Naive training

일단, 그동안 설명한 방식으로 컨브넷을 쭉 트레이닝하는겁니다.
그럭저럭 작동합니다.
그리고 이를 기반으로 saliency map을 그릴 수 있습니다.

4.2 Overshoot correction

일단, 그림만 보면 overshoot랑 비슷하지만 실제로 일어나는 현상이 overshoot라고 부를수있는지는 잘 모르겠습니다. 이 부분은 boundary correction이라고 부르면 이해가 쉽습니다. 섹션 제목이 위트를 집어넣으려는 과욕의 결과물이 아닌지..

- 1.6초중에 마지막 0.1초에만 보컬이 아주 조금 포함된 경우가 있겠죠.
- 또는 반대로 처음 0.05초에만 보컬이 포함된 경우도 있을거에요.

이런 애들도 전부 보컬이 존재한다고 prediction하는것을 관찰했습니다 (그림 2). Max-pooling으로 subsampling을 수행하는만큼 당연한 결과입니다. 그림 2의 (c)와 (d)를 비교해보시죠. 이 관찰 결과를 이용해 나중에 전체 시스템을 업그레이드할 예정입니다.

4.3 Self-improvement

4.1에서 사용한 컨브넷을 CNN-알파라고 부르죠. CNN-알파의 예측값은 당연히 완벽하지 않지만, 30초 전체를 1 혹은 0으로 퉁치는것보다는 세밀하므로 이를 이용하자는것입니다. 이에 대해서는 다시 한번 언급합니다. knowledge distillation을 참고하시길.



그리고 saliency map도 뭔가 사용하고싶었던거죠. 그림 2의 (f)를 보면 얘도 뭔가 정보가 있는것같잖아요. 그래서 최종적으로는 이 섹션 맨 마지막 문단을 보면..

- 그냥 학습을 한다 (CNN-알파)
- CNN-알파의 출력값을 예측하는 컨브넷을 하나 더 학습한다 (CNN-베타)
- CNN-베타의 saliency map을 예측하는 컨브넷 CNN-감마를 학습한다. 끝! 입니다.


5. 실험

일단 잘 됩니다. 그런데 5.2, 5.3에서 하는 일을 정확히 정의하지 않은게 아쉽군요. 짐작해보건데..
- temporal detection : 시간축에서 더 세밀하게 라벨링된 데이터셋(0.1초단위일거에요)을 이용해서 보컬 유무를 탐지하고 이를 평가
- spectral localization: 특정 주파수 빈의 보컬 유무를 탐지. 따라서 groundtruth를 확보하기 이해 (보컬) 음원분리에서 사용하는 데이터셋을 이용해서 평가.

5.2 Temporal detection results

CNN알파, 베타, 감마로갈수록 성능이 증가합니다.

5.3 Spectral localization results

얘는 사실 논문에 나온대로 "not an established task"입니다. 토의는 생략하겠습니다.

6. 토의

그림 3을 자세히 보시길 권합니다. 전체 시스템의 예측이 어떤식으로 진행되는지, CNN 알파-베타-감마가 어떤 진전을 보이는지 잘 보여줍니다.



그 외 코멘트

- 30초 전체를 입력으로 받고, MP대신 average-pooling으로 시간 전체를 aggregation하면 어떨지 궁금하군요.
- discussion에는 최종적인 sigmoid output에서 threshold를 0.5로 잡는게 어쩔수없는 임의의 결정이라고 써있습니다. 맞는 말이죠. 그런데 제 의견은 이걸 잘 정하는게 아니라, 입력 데이터 - 배치를 구성할 때 - positive/negative를 50:50으로 구성해서 기본적인 분포를 맞춰주는것으로 문제를 해결하고 prediction에서는  0.5를 기준으로 반올림해도 괜찮지 않나 합니다.
- 본문에는 여기에는 자세히 안써있지만 이 보컬 디텍터는 위에서 말한대로 꼬불꼬불탐지기이기때문에 기타나 관악기 소리가 들어오면 false positive문제가 생깁니다. 해결방법은 저도 모릅니다. 
- 이런식의 weakly labelled problem은 오디오에서 흔히 볼수있는 문제입니다. 음성이나 오디오 이벤트 탐지, 새소리 탐지 등.. 비슷한 경우가 많죠. 실질적으로 사용할 수 있는 다양한 팁을 제시해주는 좋은 논문입니다.

Thursday, February 8, 2018

<처음 배우는 데이터 과학> 한빛소프트 판매 시작





제가 번역한 책 <처음 배우는 데이터 과학>이 곧 출간됩니다.  
초보자용 데이터 과학 입문서로 광범위한 내용을 쉽게 다룹니다. 재미있게 읽어주세요.


----------
목차를 첨부합니다. 좀 길군요.


CHAPTER 1 데이터 과학 유니콘이 되자!
1.1 데이터 과학자는 단지 연봉이 높은 통계학자일 뿐이다?
1.2 왜 파이썬을 쓰나요?
1.3 한마디 더

[Part 1 데이터 과학 필수 요소]

CHAPTER 2 큰 그림으로 보는 데이터 과학
2.1 문제 파악
2.2 데이터 분석 및 이해 - 기초
2.3 데이터 분석 및 이해 - 전처리
2.4 데이터 분석 및 이해 - 데이터 탐험
2.5 특징값 추출
2.6 모델 수집 및 분석
2.7 결과 정리 및 발표
2.8 코드 배포
2.9 반복 작업
2.10 주요 용어

CHAPTER 3 프로그래밍 언어
3.1 왜 프로그래밍 언어를 사용해야 하나요? 다른 대안은 없나요?
3.2 데이터 과학에서 사용하는 프로그래밍 언어
3.3 파이썬 속성 코스
3.4 문자열 데이터
3.5 함수 정의하기
3.6 파이썬의 공학용 라이브러리
3.7 개발 환경 및 라이브러리 소개
3.8 파이썬 관련 문서 및 참고 자료
3.9 더 알아보기
3.10 주요 용어

CHAPTER 4 데이터 먼징 : 문자열 다루기, 정규표현식, 데이터 정리하기
4.1 생애 최악의 데이터셋
4.2 실수를 예방하는 방법
4.3 데이터 자체의 문제
4.4 데이터 형식 문제
4.5 데이터 형식 정리 예제
4.6 정규표현식
4.7 실제 현장 이야기
4.8 더 알아보기
4.9 주요 용어

CHAPTER 5 시각화와 대푯값
5.1 파이썬의 시각화 도구
5.2 아이리스 데이터셋
5.3 원형 차트
5.4 막대그래프
5.5 히스토그램
5.6 평균, 표준편차, 중간값, 백분위
5.7 상자그림
5.8 산포도
5.9 산포도와 로그 축
5.10 산포 행렬
5.11 히트맵
5.12 상관관계
5.13 안스콤 쿼텟 데이터셋과 대푯값의 한계
5.14 시계열 데이터
5.15 더 알아보기
5.16 주요 용어

CHAPTER 6 머신러닝 개론
6.1 역사적 맥락
6.2 지도학습과 비지도학습
6.3 학습 데이터, 시험 데이터, 과적합
6.4 더 알아보기
6.5 주요 용어

CHAPTER 7 특징값 추출
7.1 일반 특징값
7.2 데이터 표본 여러 개의 대푯값
7.3 복잡한 특징값
7.4 어떤 특징값을 예측할지 결정하기

CHAPTER 8 머신러닝과 분류
8.1 분류기란?
8.2 현실적인 고려사항
8.3 이진 분류와 다범주 분류
8.4 예제 코드
8.5 다양한 분류기의 특징
8.6 분류기 평가하기
8.7 분류 기준값 정하기
8.8 더 알아보기
8.9 주요 용어

CHAPTER 9 의사소통과 문서화
9.1 일반적인 원칙
9.2 슬라이드 작성
9.3 보고서 작성
9.4 발표하기
9.5 코드 문서 작성하기
9.6 더 알아보기
9.7 주요 용어

[Part 2 데이터 과학 확장팩]

CHAPTER 10 비지도학습 : 군집화와 차원 축소
10.1 고차원의 저주
10.2 아이겐페이스와 차원 축소 예제
10.3 주성분 분석
10.4 스크리 도표와 차원 이해하기
10.5 요인 분석
10.6 주성분 분석의 한계
10.7 군집화
10.8 더 알아보기
10.9 주요 용어

CHAPTER 11 회귀
11.1 당뇨 진행 상황 예측 예제
11.2 최소제곱법
11.3 비선형 커브피팅
11.4 커브피팅 평가 : R2과 상관관계
11.5 오차의 상관관계
11.6 선형 회귀
11.7 라소 회귀와 특징값 선정
11.8 더 알아보기
11.9 주요 용어

CHAPTER 12 데이터 인코딩과 파일 형식
12.1 일반적인 데이터 형식
12.2 CSV 파일
12.3 JSON 파일
12.4 XML 파일
12.5 HTML 파일
12.6 Tar 묶음 파일
12.7 Gzip 파일
12.8 Zip 파일
12.9 이미지 파일 형식
12.10 바이트 데이터
12.11 정수형
12.12 실수형
12.13 텍스트 데이터
12.14 더 알아보기
12.15 주요 용어

CHAPTER 13 빅데이터
13.1 빅데이터가 정확히 뭔가요?
13.2 하둡과 하둡 파일시스템
13.3 HDFS 사용하기
13.4 파이스파크 예제 코드
13.5 스파크 둘러보기
13.6 스파크 연산
13.7 파이스파크를 실행하는 두 가지 방법
13.8 스파크 설정하기
13.9 파이스파크 : 더 깊이 살펴보기
13.10 스파크 : 팁과 주의사항
13.11 맵리듀스 패러다임
13.12 성능 개선을 위한 고려사항
13.13 더 알아보기
13.14 주요 용어

CHAPTER 14 데이터베이스
14.1 관계형 데이터베이스와 MySQL
14.2 키-값 저장소
14.3 와이드 컬럼 저장소
14.4 문서 저장소
14.5 더 알아보기
14.6 주요 용어

CHAPTER 15 좋은 프로그래밍 습관 기르기
15.1 코딩 스타일
15.2 버전 관리와 깃
15.3 테스트 코드
15.4 테스트 주도 개발 방법론
15.5 애자일 방법론
15.6 더 알아보기
15.7 주요 용어

CHAPTER 16 자연어 처리
16.1 자연어 처리가 필요한 상황
16.2 언어와 통계
16.3 주식 관련 신문 기사의 감정 분석 예제
16.4 자연어 처리 소프트웨어 및 데이터셋
16.5 토큰화
16.6 BoW 특징값
16.7 단어 빈도와 문서 빈도 역수
16.8 n-그램
16.9 불용어
16.10 표제어 추출과 공통부분 추출
16.11 동의어 처리
16.12 품사 태깅
16.13 그 외 문제들
16.14 자연어 처리 심화과정
16.15 더 알아보기
16.16 주요 용어

CHAPTER 17 시계열 데이터 분석
17.1 위키피디아 조회수 예측 예제
17.2 시계열 데이터 분석 순서
17.3 시계열 데이터와 타임스탬프 데이터 비교
17.4 내삽법과 외삽법
17.5 신호 스무딩
17.6 간단한 데이터 전처리
17.7 추세와 주기성
17.8 윈도 적용
17.9 시계열 데이터의 특징값 추출
17.10 특징값 추출 심화 과정
17.11 푸리에 분석
17.12 시계열 데이터와 특징값
17.13 더 알아보기
17.14 주요 용어

CHAPTER 18 확률
18.1 동전 던지기와 베르누이 확률변수
18.2 다트 던지기와 균등확률변수
18.3 균등분포와 유사난수
18.4 비이산 불연속 확률변수
18.5 표기법, 기댓값, 표준편차
18.6 종속성, 주변확률, 조건부확률
18.7 확률분포의 꼬리
18.8 이항분포
18.9 푸아송 분포
18.10 정규분포
18.11 다차원 정규분포
18.12 지수분포
18.13 로그 정규분포
18.14 엔트로피
18.15 더 알아보기
18.16 주요 용어

CHAPTER 19 통계
19.1 데이터 과학과 통계학
19.2 베이지언과 빈도론자의 비교
19.3 가설검정
19.4 다중 가설검정
19.5 매개변수 추정
19.6 t 검정
19.7 신뢰구간
19.8 베이지안 통계학
19.9 나이브 베이즈
19.10 베이지안 네트워크
19.11 선험적 확률 추정
19.12 더 알아보기
19.13 주요 용어

CHAPTER 20 프로그래밍 언어의 주요 개념
20.1 프로그래밍 방법론
20.2 컴파일과 인터프리팅
20.3 자료형 체계
20.4 더 알아보기
20.5 주요 용어

CHAPTER 21 알고리즘의 성능과 메모리 관리
21.1 예제 코드
21.2 알고리즘의 성능과 빅오표기법
21.3 정렬 알고리즘과 이진검색
21.4 평균복잡도와 분할상환분석
21.5 오버헤드 줄이기, 메모리 관리
21.6 팁 : 수치연산 라이브러리를 이용하자
21.7 팁 : 사용하지 않는 대용량 객체를 삭제한다
21.8 팁 : 가능하면 내장 함수를 사용한다
21.9 팁 : 불필요한 함수 호출을 자제한다
21.10 팁 : 덩치가 큰 객체는 가급적 새로 만들지 않는다
21.11 더 알아보기
21.12 주요 용어

[Part 3 데이터 과학 특수 분야]

CHAPTER 22 컴퓨터 메모리와 자료구조
22.1 가상 메모리
22.2 C 언어 예제
22.3 자료형과 배열
22.4 구조체
22.5 포인터, 스택, 힙
22.6 주요 자료구조
22.7 더 알아보기
22.8 주요 용어

CHAPTER 23 최대 우도 추정과 최적화
23.1 최대 우도 추정
23.2 커브피팅 예제
23.3 로지스틱 회귀 예제
23.4 최적화
23.5 경사 하강법과 볼록 최적화
23.6 볼록 최적화
23.7 확률 경사 하강법
23.8 더 알아보기
23.9 주요 용어

CHAPTER 24 고급 분류기
24.1 라이브러리 선정
24.2 딥러닝 기초
24.3 합성곱신경망
24.4 텐서
24.5 MNIST 숫자 필기 인식
24.6 순환신경망
24.7 베이지안 네트워크
24.8 학습 및 예측
24.9 마르코프 연쇄 몬테카를로 방법
24.10 파이엠시 예제
24.11 더 알아보기
24.12 주요 용어

CHAPTER 25 확률 과정
25.1 마르코프 연쇄
25.2 마르코프 연쇄의 종류
25.3 마르코프 연쇄 몬테카를로
25.4 은닉 마르코프 모델
25.5 비터비 알고리즘
25.6 랜덤워크
25.7 브라운 운동
25.8 ARMA 모델
25.9 연속 마르코프 과정
25.10 푸아송 과정
25.11 더 알아보기
25.12 주요 용어

Tuesday, January 16, 2018

논문 요약 - Spectral normalization for generative adversarial networks




ICLR 2018 제출 논문입니다 (링크). 최초로 단일 네트워크로 이미지넷 1000개 범주의 이미지를 생성한 방법입니다. Chainer 프레임워크를 사용했고 아마 일본에서 나온것으로 보입니다.아이디어도 실험도 좋고, 글쓰기도 모두 훌륭합니다. icrl리뷰에서는 7점과 8점을 하나씩 받았는데 저는 좀 박한 점수라는 생각이 드네요.

1 Introduction

이 논문은 Spectral normalization이라는 GAN 학습 방법을 소개합니다. 다른 방법 대비 두가지 장점이 있습니다. 
  • Lipschitz 상수만 튜닝하면 되고 이마저도 그렇게 열심히 튜닝 안해도 됨.
  • 구현이 간단하고 연산량이 낮음.

2 Method

식(1), (2): 일반적인 GAN 식입니다.

"The machine learning community has been point out.."
WGAN등 최근 GAN 학습 관련 연구를 보면 적절한 discriminator제안한 논문이 많습니다. 이를 자세히 보면 hyperparameter space에서 loss function의 gradient surface를 '부드럽게' 만들어주는 방향입니다. WGAN 논문에 나온 그림을 보면 쉽게 이해할 수 있습니다. 


좌측이 WGAN에서 제안한 방법입니다. $\theta$가 정답에서 멀어지면 그에 비례하는 loss를 갖습니다. 반면 우측은 그렇지 않죠. 이렇게 해야 최적 hyperparameter가 아닌곳에 있을 때 최적값으로 수렴하겠죠. 이를 수학적으로 표현한것이 Lipschitz continuity입니다. 쉽게 이야기하면 함수가 미분이 가능하고 미분값(의 절대값)의 범위가 어느정도 이하로 제한된다는 의미입니다(제가 딱 거기까지 알고있음). (Yehara 2016, Qi 2017, Gulrajani 2017) 등이 모두 여기에 주목한 논문입니다. 

"While input based regularization allow for relatively ..."
기존 연구는 학습 데이터의 내분점에서는 작동하지만 그 밖의 지점에서는 작동하지 않는다고 합니다. (왜일까요?) 하지만 spectral normalization은 그렇지 않음! 


2.0 잠깐 개념 정리!

(물론 논문엔 이런 섹션 없습니다.)

  • 행렬 ${A}$의 spectral norm: 행렬 ${A}$의 가장 큰 singular value, $\max_i(\lambda_i)$ 입니다. 즉 ${A}$를 SVD했을때 나오는 값 중 가장 큰 값이죠. 
  • 행렬의 singular value $\lambda_i$는 단위벡터 $u$를 행렬에 곱했을 때 이 단위벡터가 이런저런 방향으로 늘어나는데, 이 늘어나는 정도를 나타내는 값입니다. 위키피디아에 gif로 잘 나와있습니다.
    • Deep learning book 챕터 6.5를 보면 행렬의 singular value와 loss function의 Jacobian에 대해 자세히 나옵니다.
  • Supremum: 어떤 집합의 least upper bound입니다. 대애애애애애충 상한선으로 생각합시다. $\sup A$ 로 표기합니다.

2.1 Spectral normalization

제안하는 방법은 말그대로 discriminator $f$의 레이어 $g$의 spectral norm을 조절합니다. 우선 위에서 Lipschitz에 대해 간단히 설명했는데, Lipschitz norm $||g||_{Lip}$은 $g$의 그라디언트의 spectral norm입니다. 즉 hyperparameter space에서 그라디언트의 방향 (즉, 어떤 점 $\theta'$에서 gradient descent를 수행하면 일어나는 변화 중 가장 변화가 큰 방향)입니다. 이걸 수식으로 쓰면 식 (6)입니다.  각 레이어에서는 행렬곱과 activation이 일어나죠? 여기에서 행렬곱만 보면 ($g(\mathbf{h})=W\mathbf{h}$) Lipschitz의 정의와 식(6)에 의해 $|| g ||_{Lip} = ... \sigma{W} $가 성립합니다. 다시 말해 각 레이어에서 행렬곱부분의 Lipschitz norm은 각 레이어의 행렬 $W$의 spectral norm (=제일 큰 singular value)입니다.

그리고 (각주 1 참고) ReLU, LReLU등 activation 함수의 Lipschitz norm은 1이구요.

그리고 합성함수의 Lipschitz norm은 각 함수의 Liptschitz norm의 곱보다 작다는 부등식이 성립한다고 합니다. Lipschitzs norm을 '기울기의 최대값'으로 생각하시면 직관적으로 이해가 가능합니다. (..아마도요.)

따라서 식 (7)이 성립합니다. 식 7은 뉴럴넷 $f$의 전체 Lipschitz norm이 각 레이어의 행렬 $W^l$의 spectral norm의 곱보다 작다는 (upper bounded by) 의미입니다.


제안하는 방법은 각 행렬 $W$를 $\sigma{W}$ (spectral norm)으로 나누자는 말이구요 (식 8). 이렇게 하면 전체 뉴럴넷의 Liptschitz norm이 1보다 작아지겠죠?

마지막 문단에서는 Yoshida & Miyato (2017)의 방법보다 이 방법이 좋은 점을 설명하고 있습니다. (제가 비교 논문을 정확히 알지 못해 생략합니다. 대략 제안하는 방법이 더 직접적으로/명시적으로 spectral norm을 조절해준다는 내용입니다.)

2.2 Fast approximation of the spectral norm

각 행렬을 SVD를 돌리는건 너무 느리구요, 그래서 'power iteration method'라는걸 써서 구합니다. 부록 A와 알고리즘 1에 정리되어있습니다. (세부내용 생략)

식 (9, 10)을 거쳐 (11, 12)로 넘어옵니다. 자세히는 안봤..아니 못봤..습니다. 식 (12)가 결론인데, 여기에서 두번째 항 $-\lambda \mathbf{u}_1 \mathbf{v}_1^T$가 조절 전 행렬 W의 singular value를 $\lambda$만큼 빼는 연산입니다. $ \mathbf{u}_1 \mathbf{v}_1^T$은 원래 행렬에서 첫번째 singular vector(즉, 가장 scaling이 크게 일어나는 방향)를 나타내는 행렬이 되는데 이걸 보정해주는거죠. 따라서 레이어에서 일어나는 연산이 너무 한가지 방향으로만 급격하게 변하는것을 막아줍니다.

3 Spectral normalization vs Other regularization techniques

일단, 여기에서 주로 비교하는 기존 알고리즘을 제가 잘 몰라서 본문의 텍스트에 의존해 다소 피상적으로 설명하겠습니다.


  • vs Weight Normalization (WN), Salimans & Kingma (2016): $W$의 각 행을 $l_2$-normalization한다. (라고 써있는데 식을 보면 각 행의 제곱의 합을 normalize하는거에 더 가까운것 같기도?)  
    • ==> singular value $\lambda_i$의 제곱이 행의 개수와 같아지게 하는 효과
      ==> 전체 행렬의 Frobenius norm을 1로 만드는거랑 같다 (1이 아니라 다른 상수일 뿐)
      ==> 의도한것 이상의 부작용이 존재한다
      ==> (제가 정확히 파악못한 모종의 효과에 의해) 첫번째 singular value 벡터빼고 나머지의 크기가 0에 가깝게 수렴하게 된다
      ==> (각 레이어의) 입력 중 1개만 이용한다 ($W$의 rank가 1이 됨)
    • 위의 문제는 WGAN에서 weight clipping에서도 존재함.
    • Spectral normalization엔 그런 문제 없음 (데헷)
  • vs Orthonormalization regularization, Brock 2016
    • 식 (14)를 최소화하도록 함
      ==> $W^T$와 $W^{-1}$이 비슷해지도록
      <==> $W$가 orthonormal해지도록 (위키 참고)
    • 이렇게하면 모든 singular value가 0이 됨
      ==> 즉, $W$가 아예 다른 행렬이 되어버림.
  • vs Gradient Penalty, GP (Gulrajani 2017)
    • 일단 제일 괜찮은 방법임!
    • 가장 직접적으로 Lipschitz constant를 조절함
    • 단점: 연산량이 많음, ? (+"an obvious weakness of being.." --> 이해 못함)

4 Experiment

일단, 이 뒤로는 설명 생략합니다. 

Inception score로 평가했습니다. pre-trained classification model에 GAN이 만든 이미지를 입력해서 나온 결과(10개 혹은 1000개 클래스의 확률분포)와 (라벨링이 된) 원래 이미지를 넣었을때 나온 결과(=역시 확률분포)의 유사도를 KLD로 측정하는 방법입니다.

위에서 말한대로 특정 클래스에 치우치는 문제가 덜 발생했고, 그 결과 이미지넷 1000개 클래스에 전부 유의미한 이미지를 만들어냈습니다. 

- 끝 -




논문 요약 - Measuring the tendency of CNNs to learn surface statistical regularities



이번 논문은 벤지오 그룹에서 나온 논문입니다. 저자는 Jason Jo and Yoshua Bengio. 벤지오 그룹에서 나온 논문중에 저자가 2명밖에 안되는 논문은 오랜만이군요. 비전쪽 학회에 제출한 논문같은데 제가 그 동네를 잘 몰라서 어디인지 잘 모르겠습니다. 아마 ICCV나 CVPR이겠죠? 


조경현 교수님이 트윗하신걸 계기로 읽었습니다. 이렇게 요약하셨죵.

my reading is that low-level features, on top of which higher-level concepts are built, are very specific to and specialized for a narrow set of textures.

요약

이 논문은 이렇게 요약할수 있습니다.

컨브넷이 우리 바람처럼 고수준의 정보를 파악하는것은 아니다. Adversarial example에 취약한걸 봐라! 컨브넷은 객체의 전체 모양 등을 파악한다기 보다는 개별적인 저수준 특징값(~=텍스쳐)를 파악하고 이를 조합한다. 
그러면 최신 컨브넷은 어떻게 그렇게 unseen data (=test set)에 잘 작동하는거냐? 왜냐면 실제 데이터는 고수준, 추상적 정보와 저수준 특징값의 상관관계가 높기 때문이다.

배경 소개


이를 실험적으로 보여주려면 어떻게 해야할까요? 몇몇 기존 연구([7], [4])에 의하면 저수준 특징값은 이미지의 2차원 푸리에 분석, 특히 (상대적으로) 저주파 성분으로 표현이 가능합니다.

그리고 원본 이미지의 푸리에 성분(Fourier statistics)을 왜곡한 데이터를 이용해 다양한 실험을 수행합니다. 이 왜곡을 식(1)로 표현하죠.

$ F: X \rightarrow X' $

이 왜곡은 다음 조건을 만족해야합니다.

1) 사람 눈으로 봤을 때 여전히 같은 객체로 인식이 가능해야합니다. 즉, 사람은 못속이지만 컨브넷은 속이는 왜곡이죠.
2) 왜곡 전후의 Surface regularities (=질감, 텍스쳐)는 달라야합니다.
3) 이 왜곡으로 인해 컨브넷의 테스트셋 인식률이 확연히 낮아져야합니다.


이와 관련해 몇 가지 기존 연구를 소개합니다.

[43] 이미지의 단순한 특징값(image statistics)와 분류작업결과(visual understanding)에 상관관계(a strong statistical relationship)이 존재한다.
[31] 실제로 일어날 수는 없지만 보기엔 자연스러운 배경 (예를 들어 구름과 잔디가 같이 존재하는 배경에 떠있는 자동차)를 합성해보니까 컨브넷이 이 배경에 크게 영향을 받았다.


실험


실험에서 사용한 왜곡 방법은 간단합니다. 식 (3)-(6)을 참고하세요.

원본으로 학습한 컨브넷에, 푸리에 성분을 왜곡한(즉 사람 눈으로 보기엔 여전히 별 차이가 없는) 이미지를 넣었더니! --> 아주 성능이 좋은 (에러율 1-2%) ResNet에서 에러율이 실험에따라 5%, 8%, 10% 등 크게 증가했습니다. 그리고 대조군으로 쓴 랜덤 왜곡에서는 이렇게 심각하게 성능이 떨어지지 않았구요. (그림 3, 4, 6, 7 참조) (표를 전부 그림이라고 표시했군요. 나중에 그림 번호는 바뀔수도 있습니다.)

결론

결론은 간단합니다.

  • 예상대로 푸리에 왜곡이 컨브넷을 발랐다.
  • 푸리에 왜곡을 데이터 augmentation에 포함해서 학습을 수행하면 많이 개선이 된다. (하지만 이게 완벽한 해결책이라는건 아님!)

Sunday, January 7, 2018

논문 요약: Gradients explode - deep networks are shallow - ResNet explained (1)

Gradients explode : 뉴럴넷은 그라디언트를 이용해 학습이 이루어지는데 deep 뉴럴넷은 계층(layer)이 많아서 그라디언트가 계속 곱해지는 (=backprop) 과정을 포함합니다. 이 곱셈 연산때문에 그라디언트가 발산하는 현상을 말합니다. 
ResNet : 2015년 이미지넷 챌린지에서 우승을 차지했고 이후 엄청난 주목을 받고있는 혁신적인 네트워크 구조입니다. skip connection이라는 독창적인 구조때문에 ResNet을 설명하는 논문만도 많이 나오고 있습니다. 기억에 남는 논문으로 arXiv:1702.08591이 있습니다.


일단 굉장한 연구라는 첫인상을 주는 논문입니다. 제목은 야심차고 분량은 무려 59페이지군요. 부록이 길고 본문은 19페이지밖에(!) 안됩니다.

읽어보니 아주 친절한 논문입니다. 독창적이고 복잡한 아이디어를 엄밀하게 설명하려다보니 친절하지 않으면 작성이 어려울것같네요. 

내용을 깊게 다루지는 못하고, 본문 위주로 아이디어를 잘 설명해보겠습니다.

초록 Abstract

그라디언트 폭발(exploding gradients)때문에 deep neural networks의 학습이 어렵다고들 한다. 그리고 이를 해결하기 위한 방법이 여럿 나왔지만 실제로 그렇게 해결이 선뜻 되는것은 아니다. 특히 collapsing domain problem이라는걸 설명하도록 하겠다.

잘 들여다보면 모든 뉴럴넷이 ResNet이 되는걸 설명하고 이를 일반화하는 residual trick을 소개한다. 보면 알겠지만 이 이유로 네트웍을 수학적으로 단순하게 설명할 수 있고 아마도 그래서 ResNet이 성능이 잘나오는 것 같다.

1 Introduction

최근 연구를 보면 뉴럴넷의 깊이(depth)가 좋은 성능의 핵심이다. 그런데 그라디언트 폭발때문에 깊은 뉴럴넷을 학습하는게 쉽지 않다. 그리고 그라디언트 폭발은 보통 직관적으로 단순하게 설명하곤 하는데 사실 정확하게 밝혀진 현상이 아니다.

일단 용어의 정의조차 불분명하다. 그라디언트 폭발은 그라디언트 벡터의 크기로 재나? 아니면 각 차원(성분)의 크기 하나하나? 아니면 각 레이어별로 Jacobian의 eigen value로? 이 관점에 따라 해결방법도 달라지게 마련이다. 

심지어 각 관점이 정말로 학습의 난이도와 연관이 있는지도 알려져있지 않다.

SGD를 가속하는 다양한 알고리즘 (RMSProp, Adam, vSGD)는 결국 그라디언트 벡터(의 일부)의 크기를 조절해서(rescale) 성능을 높인다. 그럼 그라디언트 폭발이 이 방법으로 해결이 되는 문제가 맞나? 아니면 더 본질적인 문제가 존재하나?

또 batch normalization (BN), layer normalization (LN)같은 방법 내지 계수 초기화(glorot 2015, he 2015) 같은걸 써서 그라디언트 폭발을 줄이고 깊은 네트웍을 학습한다. BN논문에 보면 이렇게 써있다.

learning rate이 너무 높이면 그라디언트가 폭발하거나 사라지거나 혹은 성능이 안좋은 로컬 미니마에 수렴한다. BN은 이를 방지한다.

ResNet논문엔 이렇게 써있다.

딥뉴럴넷은 학습이 잘 안된다. 그렇지만 초기값의 범위를 조절하고 각종 normalization 레이어를 사용해 이를 대체로 방지할 수 있다.

그렇지만 우리 연구에 의하면 요런 방법이 이렇게 써있는만큼 효과가 있지는 않다. normalization을 하면 도움이 되는 경우가 있긴 하지만 항상 그런것은 아니다. 얘네들은 forward pass를 잘 조절해주면 그라디언트 폭발을 막을수 있다는 접근방법인데, 우리 연구결과에 의하면 그렇지 않다.

skip connection을 넣으면 레이어를 엄청 많이 쌓아도 성능이 계속 올라가는건 맞다. 그렇지만 왜 그런지는 아무도 모른다.

우리 논문의 공헌은 다음과 같다.


  1. GSC(gradient scale coefficient)라는걸 정의한다. GSC는 그라디언트 폭발을 측정하는 새로운 방법이고(섹션 2) 네트워크의 스케일링(섹션 2)이나 레이어 너비를 조절하는(섹션 3) 등의 변화에 강건하다. 또 학습의 난이도를 직접 측정할 수 있다(섹션 4). 
  2. 그라디언트 폭발을 막는다고 주장하는 방법을 써도 그라디언트가 결국 폭발하고야 만다는것을 보여준다(섹션 3)
  3. 위에서 얘기한, SGD에서 그라디언트의 크기를 일부 조절하는 방법으로는 그라디언트 폭발을 막지 못한다. 이걸 GSC측정으로 보여준다. 그라디언트 폭발은 그런 간단한 문제가 아니라 최적화 문제를 푸는데 존재하는 본질적인 문제로 보인다. 이 문제때문에 깊은 구조로 네트웍을 만들어도 학습이 잘 안되서 결국 얕은 구조나 마찬가지가 된다 (섹션 4). 이 내용은 역대 처음으로 나오는 얘기다.
  4. forward activation에 문제가 없어도 그라디언트가 폭발한다. 이것도 우리가 처음으로 밝혔다. 이것도 역시 깊은 구조에서 학습이 어려운 이유다. (섹션 5)
  5. 아주 깊은 구조를 학습할대 생기는 collapsing domain problem이라는걸 정의한다. 이것도 우리가 처음으로 정의하는 문제다. 얘는 초기화를 잘 해도 여전히 존재한다. (섹션 6)
  6. skip connection은 그라디언트를 줄여주는 역할을 한다고 일반화할 수 있다. 이것도 우리가 처음이다(섹션 7).
  7. residual trick을 소개한다(섹션 4). 이에 의하면 ResNet은 skip connection이 없는 일반적인 네트워크의 단순화된 버전으로  그 덕분에 'orthogonal initial state'를 달성 가능하다. 그리고 이것때문에 ResNet의 성능이 좋은것이라고 주장한다(섹션 7). 
섹션 8에는 각종 실용적인 조언을 소개한다.

부록 B는 본문 내용을 더 자세히 소개한다. 

2 Exploding gradients defined - the gradient scale coefficient

2.1 표기법

보통 입력을 레이어 0, 출력을 레이어 N으로 보는데 우리는 그라디언트에 관심이 많으므로 출력 레이어를 $0$으로 놓는다. $f_l$은 $l$번째 레이어의 출력이다. 각 레이어의 파라미터를 $\theta_l$로 놓는다.

nominal depth는 전체 레이어 개수를 의미한다. 여기에는 pooling이나 activation 레이어도 포함된다. 
compositional depth는 일반적으로 우리가 말하는 깊이로, 파라미터가 존재하는 레이어만 얘기한다.

Quadratic expectation $\mathbb{Q}[x]=\mathbb{E}[X^2] ^ {1/2}$다. inverse quadratic expectation $\mathbb{Q}^{-1}$은 $\mathbb{E}[X^{-2}]^{-1/2}$다. 

2.2 그라디언트 폭발 표기법

(주: 여기에서는 두가지 개념이 나옵니다.)

$\mathcal{J}^l_k(\theta, x, y)$는 $f_k$에 대한 $f_l$의 자코비안이다.
$\mathcal{T}^l_k(\theta, x, y)$는 레이어 k의 파라미터 $\theta_k$에 대한 $f_l$의 자코비안이다. 이제 $||.||$가 뭔가 norm이라고 가정하자. (주: $||\mathcal{J}^l_k||$나 $||\mathcal{T}^l_k||$는 l에서 k로 backprop이 진행되는 동안 일어나는 '변화'의 크기와 관계가 있습니다. 따라서 두 레이어의 인덱스 차이인) $k-1$에 대해 $||\mathcal{J}^l_k||$나 $||\mathcal{T}^l_k||$이 지수적으로 증가한다면 그라디언트가 폭발하고 학습이 어려워진다는 생각을 해볼법 합니다.

그런데 이 관점은 멀쩡히 학습이 잘 되는 네트워크도 그라디언트 폭발이 일어나는 것으로 해석할 수가 있다. 예를 들면 학습 가능한 네트워크를 가지고와서 각 레이어의 출력값  $f_l$과 파라미터 $\theta_l$에 $R^{-l}$ ($R>1$)을 곱하면 (주: 즉 출력과 파라미터가 R이라는 상수에 대해 $l$이 증가할수록 (=입력에 가까워질수록) 지수적으로 감소하도록 만들면), 이 네트워크는 오히려 레이어마다 그라디언트에 $R^{-2l}$을 곱하면 학습이 잘된다. 즉, 그라디언트가 폭발해야 학습이 잘된다! (주: 직관적으로 생각하면 $R^{2l}$이어야 할 것 같은데말이죠... 이 부분 좀 헷갈리는데 일단 넘어갑니다.)

명제 1. 생략 (주: 위의 내용을 엄밀하게 정리한 명제입니다.)

따라서 자코비안이 지수적으로 증가한다고해서 그라디언트가 폭발하는것은 아니다. 

2.3 The gradient scale coefficient (GSC)

이제 그라디언트 폭발을 학습이 어려워지는 문제와 직접 관련지어서 정의해보자.

정의1. $m \times n $행렬 A의 qm norm (quadratic mean norm)을 정의한다. qm norm은 행렬 A의 singular value들의 제곱의 평균의 sqrt()다. 

$$ ||A||_{qm} = \sqrt{\frac{s_1^2 + s_2^2 + .. + s_{\min(m,n)}^2}{n}}$$


이를 좀 더 쉽게 정의해보자. $u$를 균등분포를 따르는 임의의 단위벡터라고 하면 $||A||_{qm} = \mathbb{Q}_{u}||Au||_2$ 가 된다. 즉, "행렬 A가 벡터의 길이에 미치는 영향의 기대값"이다. 

정의 2. 그라디언트 스케일 계수 GSC, gradient scale coefficient를 정의한다. $0\le l\le k\le L$ 일 때 GSC는 다음과 같다.

$$ GSC(k,l,f,\theta,x,y) = \frac{||\mathcal{J}^l_k||_{qm}^2||f_k||_2^2}{||f_l||_2^2} $$

(주: 즉, 레이어 $l$과 $k$의 L2-norm의 제곱의 비 $ \times $ 자코비안의 qm norm)

정의 3. $GSC(k,l,f,\theta,x,y) \ge cr^{k-l}$ 일 경우 이 네트워크 $f(\theta)$가 r의 속도/비율로 그라디언트 폭발이 일어난다고 한다.

이 정의를 따르면 $c, r$을 아주 작게 잡으면 모든 네트워크에 그라디언트 폭발이 존재한다고 할 수 있다. $c, r$을 객관적으로 정의할수는 없다. 이를 대강 설명하면 GSC가 지수함수로 잘 근사되면 그라디언트 폭발이 일어난다는 말이다.

정의2에 의하면 GSC는 자코비안의 qm norm과 레이어 출력 벡터의 길이의 비율의 곱이다. 즉, backward-pass에서 그라디언트의 흐름(자코비안)과 forward-pass의 activation의 흐름의 상대적인 비율이다. 다른 말로 $k$번째 레이어의 변화에 대한 $l$번째 레이어의 반응/감도에 해당한다.

(주: 분명 이 논문에서 backward-pass를 메인으로 본다고 했는데 왜 $l$번째 레이어의 변화에 대한 $k$번째 레이어의 감도로 정의하지 않는건지 잘 모르겠습니다. 아무튼 GSC는 단순히 backward pass만 측정하는게 아니라 이를 forward pass로 normalize해주는 셈입니다.)

명제 2. $GSC(k,l)$는 $f_k$의 변화에 대한 $f_l$의 변화의 제곱의 기대값이다. (증명은 E.2 참조)

파라미터의 변화에 대한 감도는 어떻게 되나? 바이어스가 없는 MLP(dense layer)를 가정하면 다음과 같다.

명제 3.  $GSC(k,l)\frac{||\theta_k||_2||f_{k+1}||_2}{||f_k||_2\sqrt{d_{k+1}}}$은 $\theta_k$의 작은 변화에 대한 $f_l$의 변화를 측정한다. (주: $d_k$는 $k$번째 레이어의 입력 차원)

섹션 2.2 뒷부분에서 같은 네트워크도 출력값에 스케일링을 하면 그라디언트를 폭발하게 만들 수 있었는데, $ GSC $는 이를 상쇄시켜준다. 

명제 4. $GSC(k, l)$은 네트워크의 출력값의 스케일링에 무관하다. 


3 Gradient explode - despite bounded activations

 GSC를 구해보면 각종 기법을 사용해도 그라디언트가 폭발하는걸 볼 수 있다.

명제 5. 자코비안을 근사적으로 분해(decompose)할 수 있다면 GSC도 마찬가지로 분해가 된다. 즉, $||\mathcal{J}^l_{l+1}\mathcal{J}^{l+1}_{l+2}..\mathcal{J}^{k-1}_{k}||_{qm} \approx ||\mathcal{J}^l_{l+1}||_{qm}||\mathcal{J}^{l+1}_{l+2}||_{qm}..||\mathcal{J}^{k-1}_{k}||_{qm}$ 라면 $GSC(k,l) \approx GSC(k,k-1)GSC(k-1,k-2)..GSC(l+1,l)$이다. (E.5에서 증명)


(주: GSC가 자코비안의 qm norm과 레이어의 출력값의 제곱의 비율이므로 그렇겠죠?)

따라서! 각 레이어의 $GSC$가 대략 $ r > 1 $ 이라면  $GSC(k,l)$ 이 $k-l$의 지수만큼 증가한다. 이제 실제 네트워크에서 어떤일이 일어나는지 보자. 그림 1의 좌측을 보면..




batch-ReLU, layer-tanh, batch-tanh, SeLU를 보면 그라디언트가 log축에서 선형으로 증가한다. 즉 그라디언트가 폭발했다. 이는 계수 초기화, 레이어 normalization, SeLU를 써도 그라디언트 폭발이 일어난다는 이야기다.

이는 명제 4를 생각하면 당연한 결과다. GSC는 네트워크 출력값의 스케일링 변화에 무관하기 때문이다.

반면 ReLU, layer-ReLU, tanh에서는 그라디언트 폭발이 일어나지 않았다. 그러나 얘네들은 다른 단점이 있다. (섹션 5에서 다룸)

마지막으로, GSC는 레이어의 깊이나 너비와 무관하다.


4 Exploding gradients limit depth - the residual trick

4.1 Background: Effective depth

Veit et al. (2016)에서 'effective depth'라는 개념을 제시했다. 일단 residual network는 레이어가 skip connection을 포함하므로 residual network의 학습을 다음의 최적화문제로 생각할수 있다.

$$ \arg \min_{\theta} E\text{, where } E = \frac{1}{|D|}\sum_{(x,y) \in D} f_0(y,(i_1 + r_1(\theta_1))\circ (i_2 + r_2(\theta_2)) \circ .. \circ (i_L + r_L(\theta_L)) \circ x) $$ (식 2)

레이어가 모두 같은 차원이면 residual network에서 skip connection은 identity matrix로 연결이 된다. (주: 즉, 레이어의 residual connection은 나머지 (residual)을 학습합니다. 이제 위의 식 우변을 chain rule을 이용해 미분하면 다음과 같습니다)

$$ \frac{df_0}{dx} = \frac{df_0}{df_1}(I + \frac{dr_1}{df_2})(I + \frac{dr_2}{df_3}) .. (I + \frac{dr_{L-1}}{df_L})(I + \frac{dr_L}{dx}) $$

이를 풀어쓰면 $2^L$개의 항이 나온다. (주: 이항분포 비슷한걸 생각해보세요.) 그 중 다수는 대략 L/2개의 identity matrix와 L/2개의 자코비안의 곱이다. 만일 자코비안의 operator norm(주: eigen value의 가장 큰 값정도로 이해합시다.)이 $p$보다 작고 $p<1$이면 각 항은 자코비안을 곱한 숫자만큼 지수적으로 감소한다. (정수) $\lambda$개 이상의 자코비안의 곱이 있는 성분을 '$\lambda$-residual'이라고 부르고 모든 $\lambda$-residual의 합을 $res^\lambda$라고 하자. 그러면 다음의 식이 성립한다.

$$ ||res^\lambda||_2 \le ||\frac{df_0}{df_1}||_2\sum_{l=\lambda}^L p^l \binom{L}{l} $$

만일 p<!이면 우항은 지수적으로 감소하며 특히 $\lambda$가 클수록 더욱 더 그렇게 된다. 이$res^\lambda$의 값이 너무 작아지지 않는 $\lambda$의 범위 내에서만 학습(주: 여러 레이어가 서로 유의미하게 학습이 되는것)이 이루어진다. Veit et al. (2016)은 그 경계가 되는, 즉 제대로 학습이 가능한 $\lambda$의 상한선을 effective depth라고 정의한다. 섹션 D를 보면 veit et al. (2016)보다 더 명확하게 effective depth를 정의했다. 

(주: 즉, 레이어가 아주 많을 때 이 중 일부는 제대로된 그라디언트를 받아서 학습이 되는게 아니라 skip connection에서 identity matrix를 통해 받아온 그라디언트로만 학습이 된다는 식입니다. 그러므로 레이어가 많이 있어봤자 실제로 깊은 네트워크를 형성하는게 아니라 얕은 네트워크 여러개의 앙상블처럼 볼 수 있습니다.)

4.2 The residual trick

(주: 명시적으로 skip connection이 존재하지 않더라도 일반적인 레이어 연결을 skip connection과 나머지로 해석하면 모든 네트웍을 residual network라고 볼 수 있다는 내용입니다. 즉 레이어 파라미터 초기화를 'identity matrix + 나머지'로 해석한다는 말입니다.)

용어: 여기서부터 ResNet은 He et al. (2016b)의 구조를 지칭하고 residual network는 (식 2)로 표현이 가능한 모든 네트워크를 의미합니다. 

---- 일단 여기에서 요약 1편을 마칩니다. ----