7.2 아핀 구조와 비선형성

실습 · 연습문제 2개

두 아핀 층을 하나로 접기 fold-affine-layers

활성화 함수 없이 쌓은 두 층

g(x)=W2(W1x+b1)+b2g(\mathbf{x}) = \mathbf{W}_2(\mathbf{W}_1\mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2

는 하나의 아핀 사상 Wx+b\mathbf{W}\mathbf{x} + \mathbf{b}와 같다. 함수 fold(W1, b1, W2, b2)를 완성해 (W, b)를 반환한다.

인자 shape
W1 (h, d)
b1 (h,)
W2 (m, h)
b2 (m,)

반환하는 W의 shape은 (m, d), b의 shape은 (m,)이다. 테스트는 무작위 입력에서 g(x)와 W @ x + b가 같은지 확인한다.

힌트: 먼저 g(x)g(\mathbf{x})를 전개해 x\mathbf{x}가 곱해진 항과 나머지 항을 모은다.

ReLU 합의 꺾이는 점 찾기 relu-breakpoints

1차원 함수

f(x)=∑j=1ncj ReLU(wjx+bj)f(x) = \sum_{j=1}^{n} c_j \,\mathrm{ReLU}(w_j x + b_j)

는 조각별 아핀 함수다. 함수 breakpoints(c, w, b)를 완성해 기울기가 실제로 바뀌는 점들을 오름차순 NumPy 배열로 반환한다.

  • 뉴런 jj는 wjx+bj=0w_j x + b_j = 0인 점, 즉 x=−bj/wjx = -b_j / w_j에서 꺾일 수 있다.
  • 그 점에서 기울기는 cj∣wj∣c_j \lvert w_j \rvert만큼 바뀐다. wj>0w_j > 0이면 왼쪽 기울기 0이 오른쪽에서 cjwjc_j w_j가 되고, wj<0w_j < 0이면 왼쪽 기울기 cjwjc_j w_j가 오른쪽에서 0이 된다.
  • 여러 뉴런이 같은 점에서 꺾이면 기울기 변화가 더해진다. 합이 0이면 그 점은 꺾이는 점이 아니다.
  • wj=0w_j = 0이거나 cj=0c_j = 0인 뉴런은 꺾이는 점을 만들지 않는다.

같은 점인지 판정할 때와 기울기 변화가 0인지 판정할 때는 허용 오차 tol을 쓴다. 아핀 조각의 수는 len(breakpoints(...)) + 1이다.