전체 글 165

[DSL] Convolutional Neural Networks Week2 : Deep Convolutional Models Case Studies

이번 주차에는 컴퓨터 비전에 어떤 모델이 있었는지에 대해서 배운다. 물론 2022년 현재를 기준으로 최신 모델은 아니겠지만 명작에는 다 이유가 있는 법이다. 1. Classic Networks 이 강의에서는 처음에 모델 3가지를 소개한다. 그 중 첫 번째는 1998년에 나온 LeNet-5다. 손으로 쓴 숫자를 인식하기 위한 모델이라고 한다. 이미지의 크기는 32x32x1이다. gray scale이기 때문에 채널이 1개다. 그 당시에는 활성화 함수로 ReLU를 잘 사용하지 않고 시그모이드랑 tanh를 사용했다는 점과 주로 max가 아니라 average pooling을 사용했다는 점이 최신 모델과 큰 차이점인 것 같다. 그리고 파라미터 개수가 60,000개 밖에 되지 않기 때문에 현대 모델과 크기가 많이 차..

[DSL] Convolutional Neural Networks Week1 : Foundations of Convolutional Neural Networks

드디어 강의의 절반을 넘었다. 하지만 아직 갈 길이 멀다. 이번 강의는 컴퓨터 비전에 관한 내용인 것 같다. 고작 1년 전만 해도 컴퓨터 비전이 뭔지 몰랐을 정도로 머신 러닝이랑 동떨어져 있던 사람인데 어쩌저찌 여기까지 왔다. 1. Edge Detection 이름만 들었을 때는 무슨 에지 케이스 관련 알고리즘인 줄 알았는데 그게 아니라 이미지에 수직, 수평선들을 검출해내는 알고리즘이었다. 여기서 convolution이라는 연산이 사용된다. 수학적으로는 별표(*)가 국룰이라는데 코드 상에서는 이미 곱하기로 사용하고 있어서 추가적인 함수를 통해서 convolution 연산을 사용해야 한다. 텐서 플로우, 케라스 등에 이런 연산 함수들이 있다. 가운데의 3x3 행렬을 필터나 커널이라고 하는데 강의에서는 필터라..

[DSL] Structuring Machine Learning Projects Week 1 : ML Strategy (2)

요샌 사정이 있어서 강의를 매번 늦은 밤에 듣다 보니 집중력이 떨어진 것 같다. 그래도 열심히 해보자. 1. Error Analysis 모델의 오류를 줄이기 위한 분석 방법에 대해서 뭔가 열심히 듣긴 했는데, 핵심은 몇 문장 안 되는 것 같다. 수동으로 데이터를 살펴보면서 어떤 종류의 오류가 주로 발생하는지, 라벨링이 잘못된 데이터는 없는지 파악하라는 것이 알파이자 오메가가 아니었을까. 오류의 종류라고 하면 거창한 게 아니라 고양이 탐지 모델에서 개를 고양이라고 하지 않는지, 사자나 호랑이를 고양이라고 하지 않는지(좀 험악해서 그렇지 따지고 보면 고양이가 맞긴 맞다), 화질이 너무 구리지는 않았는지 정도를 파악한다. 그리고 그 비율을 파악해서 어떤 문제에 집중해야 할지 결정한다. 100개의 오류 중에 5..

[DSL] Structuring Machine Learning Projects Week 1 : ML Strategy (1)

어느덧 세 번째 강의를 시작했다. 이번 강의는 실제로 머신 러닝 프로젝트를 구성하는 경우에 도움을 받을 수 있는 내용인 것 같다. 1. Orthogonalization 머신 러닝 모델을 짤 때 모델을 더 개선하기 위해서 사용하는 방법은 정말 다양하다. 강의에서 언급된 방법은 한 이 정도 되는 것 같다. 그리고 이 방법들로 얻을 수 있는 효과도 조금씩 다르다. 그런데 한번 방법을 적용했는데, 한 번에 여러 가지 효과가 나타난다면 모델을 내가 원하는 방향으로 조정하기가 상당히 쉽지 않을 것이다. 예를 들어, 원하는 효과를 위해서 어떤 파라미터를 하나를 조정했는데 다른 수치가 감소할 수도 있다. 그래서 orthogornalization(직교화)이 중요하다. 한 번에 하나만! 이 핵심 아이디어다. 어찌 보면 선..

[DSL] Improving Deep Neural Networks Week 3 : Hyperparameter Tuning, Batch Normalization and Programming Frameworks

Week1에서는 dW, db를 구하는 과정에서 최적화, Week 2에서는 그 이후의 gradient descent에서 최적화하는 방법에 대해 배웠다. Week 3에서는 또 다른 최적화 기법을 배운다. 1. Hyperparameter Tuning 머신 러닝에는 많은 하이퍼 파라미터가 있다. 그리고 개발자는 좋은 결과를 내도록 이 변수들을 결정한다. 우선, 앤드류 응 교수님은 학습률이 가장 중요한 하이퍼 파라미터라고 생각하시더라. 아직 내가 이 분야에서 너무 쪼렙이라 의견을 가질 만큼의 지식이 쌓이지 않아서 나는 잘 모르겠지만, 다른 전문가들은 다르게 생각하는 경우도 있는 것 같다. 그럼 얘네들을 어떻게 결정할까? 딱히 왕도는 없는 것 같다. 해봐야 안다는 마인드로 일단 해본다. 조정할 하이퍼 파라미터를 결..

[DSL] Improving Deep Neural Networks Week 2 : Optimization Algorithms

2번째 강의의 Week 2. 이제 슬슬 Neural Network를 더 빨리 학습시킬 수 있는 최적화 알고리즘에 대해 배우기 시작한다. 강의 목차를 봤을 때 다양한 최적화 기법에 대해 배울 것 같다. 1. Mini-batch Gradient Descent 우선, 이 기법을 설명하기 전에 용어 정리부터 하자. Mini-batch란 주어진 학습 데이터를 일정 크기로 나누는 것을 의미한다. 그림처럼 학습 데이터가 오백만 개일 경우엔 mini-batch 하나 당 데이터를 1000개씩 포함해서, 총 5000개의 mini-batch로 나눌 수 있다. mini-batch 번호는 중괄호를 사용해서 표시한다. 그럼 왜 mini-batch를 사용하느냐? 만약 batch의 크기가 오백만 개의 데이터인 경우에는, 한 batc..

[DSL] Improving Deep Neural Networks Week 1 : Practical aspects of Deep Learning

다음 코스도 바로 시작했다. 제목으로 내용을 유추해보자면, 저번 코스에서 대략 머신 러닝, 딥 러닝 모델이 어떤 방식으로 작동하는지 파악했으니 이번엔 그 모델을 더 잘 작동할 수 있도록 만드는 방법을 익히는 것이 목표인 것 같다. 우선, 데이터를 나누는 방법부터 시작한다. 아무리 내가 머신 러닝 무식자라지만, 데이터를 학습용, 검증용, 테스트용으로 나누는 것 정도는 알고 있었다. 이 강의에서는 검증용을 개발용이라는 용어로 사용한다. 빅데이터 시대가 되면서 데이터 양이 폭발적으로 증가했기 때문에, 원래 60/20/20 정도로 나누던 비율이 극단적으로 99.5/0.4/0.1 이렇게 바뀌어도 괜찮다는 사실을 새로 알게 됐다. 테스트용이 고작 0.1%라도 10000개 정도 되면 모델을 테스트하기에는 충분하다는 ..

[DSL] Neural Networks and Deep Learning Week 4 : Deep Neural Network

미션 1의 마지막 주차. 정말 새로운 내용은 없었고 지금까지 한 내용의 확장 + 정리하는 느낌이었다. 아직 코딩이랑 퀴즈는 안 해서 걔네는 잘 모르겠다. 우선은 notation부터 정리하자. 이전이랑 거의 똑같기 때문에 이제는 좀 익숙해진 것 같다. 이전과 다른 점이라면 Layer가 깊어지면서 L이라는 변수가 생겼고, Activation Function을 g로 표현했다 정도? 앞으로 벡터가 막 여러 개 나오면 각 벡터마다 차원이 헷갈린다. 그래서 우선 각 변수들의 shape을 확실히 하고 가는 게 좋을 것 같다. Train Set의 크기를 m이라고 생각하자. 그리고 gradient로 만들어도 shape은 변하지 않는다. b는 열 벡터이지만 계산 시에 브로드 캐스팅된다. 이쯤에서 왜 굳이 레이어를 깊게 쌓..

Newport CSD

SmartSSD에 이어서 Newport CSD 연구도 끝났다(?). 교수님이 10월에 정보과학회에 논문 제출하자고 하셔서 그게 진짜 끝이긴하다. 막바지에는 마구마구 실험하느라 정신없었던 것 같다. 그래도 어느 정도 유의미한 결과가 나온 것 같아서 다행이다. Newport CSD를 클러스터로 사용해서 Host가 overload된 상황에서의 Matrix Multiplication의 성능을 개선하는 것이 내 연구의 주제였다. overload되지 않은 상태에서도 성능이 조금 좋아졌고, overload된 정도가 심할 수록 성능 개선의 폭이 커졌다. 7월부터는 기업 인턴을 가느라 학부 연구생을 못하기 때문에, 돌아오면 얼탈까봐 그때가서 논문만 작성하면 되도록 미리 추가 실험을 진행해두고 있다. 10월에 내 이름으로..

[DSL] Neural Networks and Deep Learning Week 3 : Shallow Neural Networks

Week 2에는 이진 분류 문제를 해결하기 위해 상당히 간단한 Logistic Regression 모델을 만들었다. Week 3에는 이 모델을 조금 더 확장하는 방법에 대해서 배웠다. 역시 새로운 notation부터 정리하는 게 정신 건강에 이롭다. 우선 각각의 동그라미는 노드라고 부른다. 그리고 층이 하나 더 생기면서 위 첨자로 [1], [2]가 생긴 걸 볼 수 있다. Input Layer를 [0]이라고 생각하고 왼쪽부터 오른쪽으로 번호를 하나씩 증가시킨다. 여기서는 Hidden Layer가 하나밖에 없기 때문에 [1]이 Hidden Layer이고 [2]가 Output Layer다. Hidden Layer의 이름이 Hidden인 이유는 노드 값을 실제로 관찰할 수 없기 때문이다. 억지로 계산하지 않는 ..