본문 바로가기

study/인공지능

[데이콘 스터디] 7주차_함수 정리

대회 1등 코드 분석 : 1등 코드

GELU (Gaussian Error Linear Unit)

image

  • activation function(활성 함수)
    초기 인공 뉴런 -> 이진법 단위 활용 --> Sigmoid 함수에 의해 평준화 될 수 있다.

  • 네트워크가 깊어짐에 따라 ReLU가 더 효과적이게 된다.

  • 비선형성 함수인 GELU가 제안됨

  • dropout과 RELU, zoneout 결합되어지도록 ..?

  • 뉴런input에 x by m ∼ Bernoulli(Φ(x))를 곱해준다.
    뉴런 input이 특히 배치 정규화를 통해 정규분포를 따르는 경향이 있기 때문에 이 분포를 선택
    종종 신경망에서 결정론적 결정을 원하며, 이때문에 새로운 비선형성을 야기한다.

  • 더 부드러운 ReLU로 생각되어 질 수 있다.

  • GELU의 비선형성은 백분위수에 의한 입력에 가중치를 부여..?

GELU 논문 : https://arxiv.org/pdf/1606.08415.pdf
참고 : https://paperswithcode.com/method/gelu

 


itertools

python에서 제공하는 자신만의 반복자를 만드는 모듈 APL, Haskell 및 SML의 구성 요소에서 영감을 받은 반복기 빌딩 블록을 구현하며 각각은 파이썬에 적합한 형태로 재 작성

import itertools

  • 반복자(iterator)란 ?
    객체 지향적 프로그래밍에서 배열이나 그와 유사한 자료구조 내부의 요소를 순회(traversing)하는 객체

  • chain()
    : 리스트( lists/tuples/iterables ) 를 연결하는 것

    letters = ['a', 'b', 'c', 'd', 'e', 'f']
    booleans = [1, 0, 1, 0, 0, 1]
    decimals = [0.1, 0.7, 0.4, 0.4, 0.5]
    print(list(chain(letters, booleans, decimals)))

    결과 : ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1, 0.1, 0.7, 0.4, 0.4, 0.5]
    list()를 하지 않고 출력하게 되면 <itertools.chain object at 0x7f053ac09470> 이런식으로 출력됨.

  • izip()
    : 파이썬에서는 이미 요소를 튜플에 결합하는 zip () 함수가 표준 라이브러리에 있다.
    izip()은 거의 같은 방식으로 작동하지만 약간의 성능 향상을 위해 iterable 객체를 반환한다.

print(list(izip([1, 2, 3], ['a', 'b', 'c'])))

결과 : [(1, 'a'), (2, 'b'), (3, 'c')]

이 외에도 count(), imap(), islice(), tee(), cycle(), repeat(), dropwhile(), takewhile(), ifilter(), groupby() --- 가 있습니다. 출처의 링크에 설명히 자세하게 나와있습니다.

출처: https://hamait.tistory.com/803 [HAMA 블로그]

  • 1등 코드에서의 사용(chain())

    layers = [['layer_1', 'layer_2', 'layer_3', 'layer_4'], [str(i) for i in np.arange(0, 226).tolist()]]
    layers = list(chain(*layers))
    image

layers앞에 *을 붙이지 않을 경우 unflattened result를 반환한다.
왜냐하면 chain은 각각의 list를 개별적으로 필요로 하는데 layers 통째로 하나의 항목으로 들어가기 때문이라고 한다.
*의 역할이 unpacking하여 함수에 전달하는 것 같다.

image

.from_iterable을 붙이면 *와 같은 역할을 한다.

image


Batch Normalization

각 feature의 평균과 분산을 구해서 batch에 있는 각 feature를 정규화 한다. batch 전반에 걸쳐 처리되기 때문에 batch size와 관련이 깊다.

Layer Normalization

각 input의 feature들에 대한 평균과 분산을 구해서 batch에 있는 각 input를 정규화 한다. 각 input에 대해서만 처리되므로 batch size와 전혀 상관 없다.

image


(그림에서 세로가 data기준 가로로 생각, 같은 row, 다른 feature)

출처 : https://yonghyuc.wordpress.com/2020/03/04/batch-norm-vs-layer-norm/