Machine learning/Deep Learning
[딥러닝]. 자연어 처리 모델 경량화 순서
[모델 경량화 기법 적용 순서] 딥러닝 모델의 크기를 줄이는 경량화 기법은 다음과 같이 적용 순서를 결정할 수 있습니다. Pruning: 불필요한 가중치를 제거하여 모델의 크기를 줄입니다. 모델의 크기가 대폭 축소되면서도 모델의 정확도는 크게 감소하지 않습니다. Quantization: 모델의 가중치와 활성화 함수 값을 낮은 비트 수로 표현하여 모델의 크기를 줄입니다. 모델의 크기가 줄어들어 메모리 사용량이 줄어들면서도 모델의 정확도는 크게 감소하지 않습니다. Knowledge distillation: 대규모 모델의 지식을 작은 모델에 전달하여 작은 모델의 성능을 향상시킵니다. 작은 모델이 큰 모델의 성능을 따라잡게 되어 큰 모델의 정확도에 근접한 성능을 얻을 수 있습니다. Low-rank approxi..
[딥러닝]. 효과적인 학습(training) 방법 모음
1. FP32 와 FP16을 적절하게 사용하여 리소스를 절약하여 학습속도를 높힘 Mixed Precision을 이용하여 GPU resource를 효율적으로 사용할 수 있는 방법 https://bo-10000.tistory.com/32 [딥러닝 논문리뷰] Mixed Precision Training (ICLR 2018) NVIDIA와 Baidu에서 연구하고 ICLR 2018에 발표된 논문인 Mixed Precision Training을 바탕으로 정리한 글입니다. 딥러닝 학습 과정에서 Mixed Precision을 이용하여 GPU resource를 효율적으로 사용할 수 있는.. bo-10000.tistory.com 2. 추가 예정
[PyTorch]. Dataset 과 Dataloader 사용하여 전처리하기
딥러닝 프로젝트를 진행할 때 데이터 샘플을 처리하는 코드는 지저분하고 유지보수가 어려울 수 있다. 더 나은 가독성과 모듈성을 위해 데이터셋 코드를 모델 학습 코드로부터 분리하는 것이 이상적입니다. 파이토치는 Dataset 과 Dataloader를 사용하여 학습 모델에 맞게 train & test set 을 변경해주는 도구입니다. PyTorch 공식 홈페이지 발취 공감되는 부분이다. 전에는 동작만 되면 상관없다는 마인드로 코드를 짰다. 하지만 정리가 되지 않아서 미래의 내가 알아볼 수 없는 것이다.(어케 짠거야 도대체...) 지금은 코드를 구조화 하고 모듈화하여 가독성을 생각하며 코딩한다.(겪어보지 않으면 모른다.) 파이토치는 이런 부분(data Input preprocessing)을 간결하게 구현할 수 ..
[DeepLearning]. GPU 메모리와 배치사이즈(Batch_size)의 관계
사건의 발단 : PyTorch 모델 학습 중 에러 발생 RuntimeError: CUDA out of memory KcBERT-Large모델을 학습시키는 도중 이러한 에러가 발생했고 KcELECTRA-base 모델 학습시에는 발생하지 않았던 에러가 발생해서 당황 스러웠다. 나는 바로 구글링을 했고 해결점을 찾았다. https://twinparadox.tistory.com/606 TensorFlow, Keras GPU 메모리 문제(Out of Memory) 발생 시 시도해볼 방법 빅데이터 처리나 딥러닝을 하다보면 자연스럽게 마주하는 문제가 바로 메모리 문제다. 빅데이터 처리 같은 경우 그냥 파이썬에서 Numpy나 Dataframe을 사용하는 과정에서 발생하는 일이 흔하고, 그 twinparadox.tist..
[PyTorch] . Tensorflow(텐서플로) PyTorch(파이토치) 차이점 비교
딥러닝 튜토리얼에 등장하는 FashionMNIST 데이터 셋을 통해서 Tensorflow.Keras 와 PyTorch 모델링의 차이점을 정리해 보았습니다. 모델 정의 * 이해를 돕기 위해 subclass 형식으로 모델을 정의하였습니다. Tensorflow.Keras tf.debugging.set_log_device_placement(True) class MyModel(tf.keras.Model): def __init__(self): super(MyModel,self).__init__() self.flatten = tf.keras.layers.Flatten(input_shape=(28,28)) self.fc1 = tf.keras.layers.Dense(512,activation='relu') self.dr..
[Deep Learning] Tensorflow 자주 사용하는 Tensor 함수 정리
Tensorflow 프레임 워크를 사용하다 보면 자주사용하는 코드를 발견하곤 하는데. 정확히 어떤 기능을 하는 지 알지못하고 함수이름으로 대충 짐작하고 넘어가는 경우가 많았다. 이번엔 이런 것들을 코딩하는 동안에 발견할때마다 정확한 기능을 정리해보고자 한다. 중요도 상관없이 계속해서 나열 *Dense , Embedding 같은 Layer 들은 제외하고 Tensor들을 다루는 함수들 expand_dims - tf.expand_dims(input, axis) 용어 설명 : (1) Expand : 확장하다, 넓히다 (2) dimension(dims) : 차원 해석 : 차원을 확장해주는 함수이다. image = tf.zeros([10,10,3]) # TensorShape([10, 10, 3]) "0"으로 채워진..
[Deep Learning] Weight Initialization(기울기 초기화), Xavier , He
Weight Initialization 은 Gradient descent(경사하강법)을 하기전에 기울기값을 초기화 해준다라는 뜻이다. 실제 사용할 때는 대부분 Default 로 설정되어있어서 그냥 넘어가는 경우도 있지만 알아보도록하자. 기울기를 초기화 해준다는 것은 사실 생소하지만 당연한 것이다. 컴퓨터는 초기화해주지 않으면 쓰레기 값을 가지기 때문이다. 그래서 0으로 초기화를 해주거나 랜덤으로 초기화해주는 경우가 종종있지만. 딥러닝에서는 초기화 시점의 차이가 학습의 결과를 뒤바꿀 수 있으므로 보다 나은 초기화 방식을 모색하게 되었다. 초기화 시점의 차이가 학습 결과를 뒤바꿀 수 있다는 것을 풀어서 해석해보면 왼쪽 끝지점으로 초기화를 한 경우에는 local minimum 값이 학습결과가 될 것이고. 오른..
[Deep Learning] Activation Function ( 활성화 함수 ) - 비선형 함수(non linear function )
딥러닝에서 인공신경망을 설계할때 레이어마다 항상 Activaiton Function(활성화 함수)를 파라미터로 넣게된다. model.add(layers.Dense(units=512, activation='relu')) relu , elu 등등 ... 이런 것들은 왜 필요한 것일까? 먼저 활성화 함수가 없는 상태를 알아보자. 가장 간단한 인공신경망에서 이렇게 행렬곱으로 연산을 하게 된다. x1 * W1 + x2 * W2 + bias 이것을 한층 더 쌓아보자. 조금 복잡해지지만 행렬곱으로 표현할 수 있다. 하지만 아무리 Layer 를 많이 쌓더라도 결국 복잡한 선형회귀식이 될 뿐이다. Y = ax1 + bx2 + cx3 ....... + b 결국 직선이다.. 아무리 복잡한 식을 가져온들 직선으로는 곡선이 필..
[Deep Learning] Activation Function ( 활성화 함수 ) - 2. 종류
전 포스팅에서 활성화 함수의 사용 이유에 대해서 알아보았습니다. 이번엔 활성화 함수의 종류에 대해서 알아보겠습니다. 1. Sign function sign 함수를 활성화 함수를 사용할 경우 기준 점을 기준으로 0과 1로만 분류하기 때문에 결정 경계로 부터 거리를 신경쓰지 않습니다. 즉, 결정경계와 멀리 떨어져 있든 가깝던 1과 0으로 표기 하기 때문이죠. (분류가 잘 되지 않음) 그래서 이런 경계를 부드럽게 표현하여 거리의 정도를 나타내는 함수를 사용하게됩니다. 2. Tanh 함수 Tanh 함수는 값이 작아질 수록 -1, 거질 수록 1 에 수렴 가장 중요한 특징은 모든 점에서 미분이 가능 (미분이 가능하다 == 기울기가 존재한다. ) 3. sigmoid 함수 sigmoid 함수는 값이 작아질 수록 0 커..
[Deep Learning] loss function - Cross Entropy
딥러닝에서 손실함수의 종류는 여러가지가 있다. 하지만 cross entropy 는 잘 이해하지 못했는데 여기서 쉽게 이해한 내용을 정리해보고자 한다. Cross-entropy 란? 틀릴 수 있는 정보(머신러닝 모델의 output) 로 부터 구한 불확실성 정보의 양이다. 잘 이해가 안되지만 밑에 예제를 살펴보자 여기서 Cross entropy 값은 딥러닝 분류문제에서 softmax 를 통해 나온 결과값과 oneHotEncoding 되어있는 정답 값의 차이라고 보면 된다. 여기서 Q를 예측한 값(Estimated PRobability) 이라고 하고 P를 정답 값(True Probability)이라고 생각해보자. cross entropy는 정보의 량(Q)에 log qi 분의 2를 사용하기 때문에 모델의 예측값..