목록머신러닝&딥러닝 (8)
아는 만큼 보인다
본 글에서는 transformer 논문을 하나하나 따라간다거나, attention 계산 방식을 나열하는 것 대신, 보다 개념적인 부분을 다루고 뒷쪽으로 갈수록 디테일한 부분에 대한 질문을 던지며 나아가 보고자 한다. Transformer를 다룬 다른 블로그글을 보고 부분 부분은 다 이해를 했지만 전반적으로 정리를 하고 싶은 사람에게 도움이 더 될 것 같다. 개인적으로는 면접 준비를 할 때 이렇게 정리한 게 도움이 되었다. 한가지 팁이 있다면, transformer 구조가 무조건 머리속에 잘 정리되어 있어야 하고 구성요소를 순서대로 잘 설명할 수 있으면 더 좋다. 참고로 차근차근 구현 방법에 대해 이해하고 싶다면 이 블로그를 추천한다. Transformer model Attention mechanism만을..

이번 POC에서 생각보다 퍼포먼스가 좋았던 MobileNet 시작! 그냥 비교용으로 구축해봤을 뿐인데 생각보다 잘해서 좀 놀라웠다. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications [Link] MobileNet이 해결하고자 하는 문제, MobileNet의 동기 딥러닝 모델 분야에서는 일반적으로 더 깊고 복잡한 네트워크를 이용해 더 높은 정확도를 얻고자 한다. 그러나 이러한 방향은, 모델 크기나 속도를 고려했을 때 모델을 항상 더 '효율적(efficient)'으로 만들어주진 않는다. 그러나 실제 real-world application을 고려하면, 높은 정확도를 '빠르게', '작은 모델로' 달성하는 것이 중..
tensorflow lite 소개, 변환, 추론 관련 내용은 여기에 정리되어 있다. SavedModel 형식과 관련된 공식 문서는 이곳이다. 그런데 이게 사용해보니, 처음에 SavedModel 형식으로 모델을 저장할 때 input_signature라는 것을 지정해줘야 했다. 즉 batch size와 input length 등 input meta 정보를 같이 저장해주어야 했다. 그냥 모델을 저장하니 에러가 나서, 구글링 끝에 얻은 코드는 다음과 같다. 아래는 TFLite로 변환하기 전, 즉 model을 pb 모델로 제대로 저장하기 위한 코드이다. def save_SavedModel(model, batch, input_len, save_path): class MyModule(tf.Module): def __..
우리 회사는 클라우드 기반 서비스를 제공하지만, 비용 등의 문제로 CPU만 사용하고 있으며, 빠른 추론 속도가 핵심이다. 그래서 Tensorflow Lite (TFLite)를 택해서 모델을 배포하고 있다. 1. TFLite 소개 TFLite는 모바일 기기, 임베디드 시스템, IoT 기기 등 리소스가 제한된 기기에서 효과적으로 추론할 수 있도록 모델을 최적화하고 배포하기 위한 프레임워크이다. 즉 Tensorflow model을 경량화하기 위한 도구이다. 빠른 응답속도, 작은 사이즈가 특징이다. TFLite는 FlatBuffer(.tflite 파일 확장자로 식별됨)라는 특수 형식을 사용하여 작고 이동 가능한 좋은 포맷을 구현했다. 반면 tensorflow 는 Protocol Buffers 라는 것을 사용하는..

이번에는 지난 번에 읽었던 ResNet 모델을 직접 한땀한땀 구현해보고자 한다. 리뷰는 여기에, 완성된 전체 코드는 여기에 있다. Tensorflow로 구현했는데, subclassing 방법으로 구현했으니 torch에서도 쉽게 따라할 수 있을 것 같다. 참고로 ResNet34를 처음부터 끝까지 구현해볼 예정이다. 1. Basic Block ResNet의 가장 기본적인 구조, basic block은 residual learning block이다. 아래 그림에서 보면 input -> layer 1 -> relu -> layer 2 -> shortcut connection (F(x)+x) -> relu 로 이루어져 있다. 이 부분만 구현하면 끝! 논문을 좀 더 보다보면, 실제로 논문에서 사용한 구체적인 lay..

요번 ECG 리듬 분류 모델로 preactivated ResNet을 사용하고 있는데, 생각해보니 쓰고 있긴 하지만 ResNet 자체를 제대로 짚고 넘어간 적이 없는 것 같아, ResNet 과 preactivated ResNet을 순차적으로 리뷰해보려 한다. 특히, ECG 분류에 있어서 ResNet은 여러모로 무난하게 잘 작동하는 모델인 것 같다. Literature review를 해봐도 ResNet 을 사용한 논문이 많은 것 같았다. 시작! (참고로 ResNet이 해결하려는 문제가 무엇인지 분명히 짚고 가고자 서론이 좀 길다 ㅎㅎ) Deep Residual Learning for Image Recognition (link) ResNet이 해결하고자 하는 문제, ResNet의 동기 딥러닝 모델들이 개발되면..
야심차게 모델링 코드를 짜고 훈련을 시작했다! 그런데 1 epoch을 돌리는데 하루 이상이 걸린다..? 가장 먼저, 원인 파악을 위해 GPU 사용 현황을 모니터링하러 가보자. 각 훈련 환경마다 GPU 모니터링 방법이 다를 수 있다. Ubuntu에서 GPU 모니터링하는 방법은 여기에 잘 소개되어 있다. 나는 회사에서 nvidia-smi로 항상 확인해주고 있다. nvidia-smi 결과를 잘 살펴보는 방법은 여기를 참조하면 된다. 즉, GPU-Util 같은 지표를 통해 GPU의 가용 성능 중 현재 얼마만큼 사용하고 있는지 확인해주면 된다. 100%인데 느리다? 그럼 모델의 문제일 것이고, 이 비율이 50% 정도 미만으로 확연히 낮다? 그럼 모델 외의 문제일 것이다. 1. 모델이 너무 크고 무겁진 않은가? G..

척도는 모델을 평가하기 위해 사용하는 값이다. 척도를 통해 모델의 성능을 비교하여 여러 모델 중 하나를 선택할 수도 있고, 기존 모델의 성능이 낮다면 이를 높이기 위해 다양한 대처를 해볼 수도 있다. 결국 잘 맞추면 되는 것 아닌가? 즉 정확도(accuracy)가 높으면 되는 것 아닌가? 라고 생각할 수도 있지만, 데이터의 특징이나 상황, 목적에 따라 다양한 척도가 사용될 수 있다. 척도에 대한 설명으로 바로 들어가기 전에, 분류 문제에 있어서 다음과 같은 confusion matrix를 그려볼 수 있다. Predicted/classified label 예측된/분류된 라벨 Negative Positive Actual label 실제 라벨 Negative True Negative 980 False Posi..