본문 바로가기

반응형

전체 글

(72)
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 7 (Dense, Fully Connected Layer) Dense, Fully Connected Layer 가끔 Tensorflow로 작성된 모델을 보다보면, 모델의 클래스 맨 아래쪽에 아래와 같은 코드를 볼 수 있다. # Tensorflow 2.X class SomeModel(tf.keras.Model): def __init__(self): # Some Algorithm... self.conv = tf.keras.layers.Conv2D(...) self.bn = tf.keras.layers.BatchNormalization() self.fc = tf.keras.layers.Dense(...) def call(self): # Some Algorithm... 다른 것은 conv, bn 등, Conv2D에서 따오거나 BatchNormalization을 축약했거..
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 6 (Dropout) Dropout Layer Dropout Layer는 Overfitting 문제점을 극복하기 위해 나온 방법론이다. 위 그림과 같은 데이터 셋 군집이 있을 때, 우리가 원하는 학습 결과는 중간의 Good 처럼 되길 원한다. 너무 학습이 되지 않으면 Underfitting처럼 분간이 안되고, 너무 학습 데이터에 과도하게 학습이 진행이 되면, Overfitting으로 학습 데이터만 맞출 수 있는 기현상이 일어나게 된다. (테스트 데이터나 실제 상황에서 정답을 내지 못하는 현상이 일어나게 된다.) 이는 제한된 샘플에 너무 특화가 되어,새로운 샘플에 대한 예측의 결과가 오히려 나빠지거나 학습의 효과가 나타나지 않는 경우를 말한다. 결론적으로 Overfitting이 일어나게 되면 위 두 그래프와 같이, 학습 데이터..
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 5 (DepthwiseConv, PointwiseConv, Depthwise Separable Conv) Depthwise Convolutional Layer Depthwise Conv 레이어는 우선 Tensorflow 2.X 에서는 기본 레이어 함수로 지원하나, PyTorch에서는 지원하지 않는다. 그렇다고 만들기 어렵지는 않다. 우선은 Depthwise Conv 레이어를 왜 쓰는지, 그 역할은 무엇인지에 대해 알아보도록 하자. 위 그림처럼, H × W × C(차례대로 Height, Width, Channels)의 Convolutional Ouput을 채널 단위로 분리하여, 각각 Conv Filter를 적용하여 Output을 만들고, 그 결과를 다시 합치면 Conv Filter가 훨씬 적은 파라메터를 갖고 동일한 크기의 Output을 낼 수 있다. (각 Filter에 대한 연산 결과가 다른 Filter로부..
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 4 (Pooling Layer) Pooling Layer의 개념과 용례 Tensorflow와 PyTorch에서는 여러 종류의 Pooling Layer 함수를 지원하지만, 이미지 분류 모델에 있어 그 중 가장 많이 활용되는 것은 MaxPooling2D 쪽이다. 그렇다면 Pooling Layer들은 어떤 역할을 하는가? 풀링은 차례로 처리되는 데이터의 크기를 줄인다. 이 과정으로 모델의 전체 매개별수의 수를 크게 줄일 수 있다. 풀링에는 MaxPooling과 AveragePooling이 존재하는데, MaxPooling은 해당 영역에서 최댓값을 찾는 방법이고, (위 그림이 MaxPooling의 예시이다.) AveragePooling은 해당 영역의 평균값을 계산하는 방법이다. 그렇다면 이러한 과정(Pooling)을 왜 거쳐야 하는가? 더 높은..
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 3 (Conv2D 내부 구조 및 시간복잡도) Conv2D 내부 구조 및 시간복잡도 지난 1편 때, Conv2D에 대한 개념적인 설명은 충분히 했지만, 이미지 분류의 주류를 이루는, 그리고 그것 중 핵심이라고 할 수 있는 Convolution Layer를 설명하면서, 실제 내부 구조가 어떻게 이루어져 있는지에 대한 설명은 빠진 것 같았다. 그래서 이번에는 매우 복잡하지만,그 내부가 어떻게 이루어져 있는지 알아볼 예정이다. Tensorflow 2.X # Tensorflow 2.X Conv2D # https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/keras/layers/convolutional.py @keras_export('keras.layers.Conv2D', 'keras...
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 2 (BatchNormalization) BatchNormalization 딥러닝 모델을 만들다보면, 딥러닝 네트워크에 있는 n개의 히든 레이어에서, n개의 미분값이 서로 곱해지게된다. 만약 미분값이 크다면 Gradient는 지수함수적으로 증가할 것이고, 모델 밑바닥으로 이를 전파할수록 Gradient는 결국 폭발하게된다. 이것을 Exploding Gradient 문제라고 부른다. Exploding Gradient 문제가 발생한다면, 딥러닝 모델에서 매우 큰 미분결과값의 적층으로 인해 모델 자체가 굉장히 불안정(unstable)해지고, 효과적인 학습이 불가능해진다. 모델의 가중치는 불안정(unstable)한 네트워크를 형성하고, 가중치 자체가 너무 거대해지다 못해 오버플로우(Overflow) 현상이 일어나기까지 한다. 이렇게 되면 더 이상 학습..
[AI 이론] Layer, 레이어의 종류와 역할, 그리고 그 이론 - 1 (Conv2D) 서 론 Tensorflow 2.X 버전이 발표되면서, 기존의 난립하고 있던 Frozen Graph나 여러 저장 방식이 통일되고, 개발자들의 불만이 많았던 Session이 사라지며, 무엇보다 Keras를 통합하며 tf.keras라는 새로운 방식이 나타났다. 실제로 EfficientNet 등의 최신 SOTA(State-of-the-Art) 모델의 소스코드를 보면,TF2.X대로 짜여진 소스 코드는 PyTorch의 코드와 매우 유사하다. # PyTorch Source Code class SomeLayer(torch.nn.Module): def __init__(self): super.__init__() # Some algorithm def forward(self): # Some algorithm PyTorch의 ..
[진로 고민] 왜 개발자인가? (코로나 시대 미래/진로) - 희망편 서 론 대학에 진학해보면 다들 알게 된다. 3년, 혹은 6년, 혹은 더 길게는 12년을 준비해서 대학에 들어갔는데, 막상 대학에 오고 보니 끝이 아니었다. 단순히 학점 관리하라는 부모님의 꾸중이나 잔소리가 중요한 게 아니었다. 취업이 될까? 부터 시작해서 취업하면 또 끝이 아니라는 선배들의 조언, 등등, 대학에 진학해보면, 우리는 인생에 '끝'이라는 것이 사실상 없다는 것을 알게 된다. 더 정확히 말하자면, 경쟁의 끝이 없다는 것을 알게 된다. 그렇기 때문에 점점 더 취업의 질에 대해 고민해보게 된다. 필자 같은 경우, 취업에서 가장 중요하게 생각하는 항목들이 아래와 같았다. 1. 연봉 2. 성장 가능성 3. 팀 내 분위기 4. 내가 행복하게 일할 수 있는가 음……. 생각보다 별 것 안 봤다. 필자의 경..

반응형