본문 바로가기

전체 글127

[Keras] model.predict(x) vs model(x) model.predict(x)batch로 데이터를 처리하기 때문에 큰 데이터에 대해서도 확장(scale)할 수 있는 방법이다.출력을 NumPy 배열로 리턴한다.코드는 대략적으로 아래와 같은 형태라고 볼 수 있다.def predict(x): y_batches = [] # batch 처리 for x_batch in get_batches(x): y_batch = model(x).numpy() # 미분이 불가능하다.그렇기에 GradientTape scope에서 gradient를 구할 수 없다.출력만 필요한 경우엔 model.predict(x)를 사용하도록 한다. model(x)tf.Tensor로 리턴한다.미분이 가능하며 model(x) 를 통해 gradient를 구할 수 있다. mode.. 2024. 5. 12.
L1, L2 Regularization Regularization이란 학습 시 overfitting을 피하고 일반화 성능을 높이는 방법이다.즉, 훈련 데이터에 대해 분산은 낮추고 바이어스는 높이면서 모델의 일반화 성능을 높이는 방법이다. Regularization은 L1, L2 regularization, Dropout 등 여러 방법이 있는데,이번 포스팅에서는 L1, L2 regularization에 대해 알아보도록 하겠다.  L1, L2 regularization은 weight에 대해 Penalty term을 추가하여 weight가 작아지도록 규제하는 방법이다.이 Penalty를 통해 weight가 훈련 데이터셋에 overfitting 되는 것을 막는다. Penalty term을 어떻게 계산하냐에 따라 L1, L2로 나뉘어진다. $$Loss.. 2024. 5. 7.
Non zero-centered activation function과 학습 비효율 CS231n 강의에서 나온 Sigmoid의 non zero-centered한 성질로 인한 학습 비효율에 대해 정확하게 이해하기 위해 정리한다.  Sigmoid function의 특징으로는 non zero-centered 라는 점이고, 출력이 항상 양수로 나온다는 점이다. Sigmoid function을 activation function으로 사용했을 때, 학습에 어떤 영향을 끼칠까? 다음과 같은 단순한 형태의 네트워크가 있다고 하자.그리고 위 그림 1에서 색칠한 영역을 자세히 살펴보면 아래와 같다.입력 $x_{1}과 x_{2}$는 앞 layer의 Sigmoid 출력이기 때문에 항상 양의 값을 갖게된다. 그리고 경사 하강을 이용한 weight의 update 수식은 아래와 같다.$$ W \leftarr.. 2024. 5. 1.
Feature scaling 과 머신러닝 학습 머신러닝 모델을 학습시키기 전 feature engineering 과정 중에 feature scaling을 하기도 한다.feature scale이 학습에 있어서 영향을 주기 때문인데,이번 포스팅에서는 feature scaling과 머신러닝 학습의 상관 관계에 대해 알아보도록 하겠다. Standardization과 Normalization먼저 feature scaling에 대표적인 방법인 standardization과 normalization에 대해 짚고 넘어가보자. Standardization (표준화)(표준화를 대체로 Z-score로 설명하기 때문에, 여기서도 Z-score를 기준으로 설명하겠다)표준화는 데이터가 표준정규분포의 속성(평균($\mu$)이 0이고 표준편차($\sigma$)가 1)을 갖도록 .. 2024. 4. 26.
ReLU의 활성 함수으로써의 사용과 미분 가능성 ReLU는 여러 딥러닝 모델에서 activation function으로써 쓰이고 있다. (ReLU에서 생기는 문제를 해결하기 위한 다양한 variation들이 있긴 하지만) $$ ReLU(x) = max(0, x) $$ 더보기 import numpy as np import matplotlib.pyplot as plt x = np.linspace(-5, 5, 100) y = np.maximum(0, x) plt.plot(x, y) plt.grid(True) plt.xlabel("x") plt.ylabel("ReLU(x)") 딥러닝에서는 모델 훈련 시 Gradient descent를 통해 Loss를 최소화하는 파라미터를 계산하는데, Gradient descent를 위해서는 미분값을 필요로 한다. 하지만 ac.. 2024. 4. 23.
엔지니어링 팀을 위한 Slack 테크 뉴스 피드 셋업 업무를 하면서 가끔 좋은 개발 아티클을 발견하면 엔지니어링 팀 메신저에 아티클을 공유하곤 한다. 그 아티클이 현재 회사에서 관심이 가는 기술이나 인사이트를 주는 글이라면 관련된 주제에 대해 논의의 장이 열리곤 한다. 이러한 공유는 분명 팀 내 커뮤니케이션 활성 및 좋은 개발자 경험, DX(Developer Experience)에도 도움이 된다고 생각한다. 하지만 매번 새로운 아티클이 올라왔는지 확인하고 공유하는 일은 꽤나 번거롭기도 하고 블로그 목록을 관리하는 것도 쉽지 않다. 이번 포스팅에서는 Slack 메신저에서 테크 뉴스 피드를 셋업하는 방법에 대해 알아보도록 하겠다. 이를 통해서 다양한 블로그나 사이트의 새로운 아티클을 Slack으로 받아볼 수 있다. GeekNews Slack bot GeekN.. 2024. 3. 4.