Processing math: 100%
본문 바로가기

분류 전체보기113

# 0. 자료구조 카테고리의 시작.. 해당 카테고리는 코딩 테스트에 준비하기 위한 카테고리이다. 보통 코딩 테스트를 준비한다하면, Only 알고리즘부터 생각하는 사람들이 있을 것이다. 물론 필자도 컴퓨터 공학과를 졸업했음에도 불구하고.. 부끄럽지만, 마음이 급해서 알고리즘 문제부터 무지성으로 풀었다. 그 결과 말할 것이 있겠나 ㅋㅋ 결과는 아주 처참했다. 그래서 알고리즘도 중요하지만, 자료구조를 베이스로 문제에 접근해야 한다고 판단했다. 물론, 프XXXX스, 백X 등.. 아주 좋은 문제들과 다른 사람들이 적어놓은 포스팅 혹은 유튜브 강의들도 넘친다. 하지만.. 기죽지 않고 내 소신대로 자료구조가 어느정도 기본은 잡혔다고 판단이 되면 알고리즘 카테고리도 새로 만들 예정이다. 일단 자료구조의 로드맵(?)과 같은 전체적인 맥락부터 살펴보자. 구글.. 2021. 12. 2.
# 13. 회귀 알고리즘 (Ridge, Lasso, ElasticNet) 이번 포스트에서는 선형 회귀 이외의 다른 회귀 알고리즘에 대해 다뤄본다. 결론부터 이야기하면 다음과 같다. Lasso = Linear Regression + L1 Regularization Ridge = Linear Regression + L2 Regularization ElasticNet = Linear Regression + L1 Regularization + L2 Regularization 우리는 학습을 하다보면 점점 Loss가 떨어지는 것을 확인할 수 있다. 하지만, 거기서 안심하면 안된다. 오버피팅(과적합)은 머신러닝 분야에서 항상 존재하는 이슈이다. 오버피팅을 방지하기 위한 기법은 여러가지가 존재한다. Dropout, Batch normalization, RandomCrop 등.. 여러가지 존.. 2021. 11. 30.
# 12. 선형성, 비선형성 (Linear, Non-linear) 이번 포스트에서는 선형, 비선형의 정의에 대해서 자세하게 짚고 넘어가려고 한다. 이 포스트를 작성하는 이유는 "선형" 이라는 단어에 대해 혼동되지 않기 위해서 남긴다. 처음으로 의문이 든 것은 다음 이미지에서 시작되었다. 이전 포스트에서 우리는 선형 회귀에 대한 내용을 다루었다. 위 이미지는 우리가 찾고자하는 선의 기울기와 절편을 얻기 위해 과도하게 update를 계속 진행하면 오버피팅이 발생한다는 의미를 나타낸다. 그런데, 보통 머신러닝을 배우다보면 선형을 기하학적으로 선의 모양을 유지하면 선형 (혹은 꾸불거리지 않거나)이라고 정의하는 것에서 모순을 느꼈다. 그렇다면, 오른쪽 그림은 꾸불거리면 더 이상 선형이 아니지 않은가? 왜 선형 회귀의 오버피팅이지? 라는 의문이 들었다. 답은 아래의 사이트에서 얻.. 2021. 11. 29.
# 9. 고유값 분해 (Eigen-value Decomposition) - 2 저번 포스트에서는 고유값과 고유벡터에 대해서 알아보았다. 이번 포스트에서는 실제로 행렬 A에 대해 고유값 분해를 하는 과정에 대해 알아보겠다. 우선, n×n 행렬 A에 대해 고유값과 그에 대응하는 고유벡터들을 구해야한다. 그리고 고유벡터들(vi)을 모아둔 행렬 V를 다음과 같이 정의할 수 있다. 두 번째 식에 각각의 열벡터(고유벡터)에 해당하는 고유값을 곱해보자. 그 결과 행렬 A와 V로 위와 같이 표현할 수 있다. 마지막으로 고유값들을 대각성분에 모아둔 행렬을 보자. 네 번째 식을 통해 AV 행렬을 인수분해가 가능하다. 다섯번째 식에서 각 열벡터(행렬 V의 고유벡터)들이 선형독립이라면 아래와 같이 행렬 A를 표현할 수 있다. 사실 아직 행렬 A를 분해하는 의미를 설명하지 않았다.. 2021. 11. 23.
# 9. 고유값 분해 (Eigen-value Decomposition) - 1 고유값 분해를 다루기 이전에 고유값과 고유벡터의 개념에 대해서 먼저 다루려고 한다. 먼저 이 포스트를 보기 이전에 선형변환에 대한 개념을 숙지하고 보는 것을 추천한다. 우리는 선형변환을 하나의 함수로써 생각했다. 예를 들어 임의의 벡터 x를 행렬 A의 선형변환 연산을 취했을 경우, 또 다른 벡터가 나오는 것처럼.. 보통은 선형변환을 통해 크기와 방향 모두 바뀐다. 하지만, 우리가 이번에 다룰 선형변환은 크기만 바뀌는 경우에 대해서만이다. 그렇다면, 고유값과 고유벡터는 어떤 의미를 지닐까? 고유값은 방향이 변하지 않은 벡터에 대해 어느정도 크기가 바뀌었는가의 의미이고, 고유벡터는 해당 고유값에 대응하는 벡터 x를 의미한다. 수학적으로는 다음과 같이 정의할 수 있다. 위 식을 이항하면 다음과 같이 표현할 수.. 2021. 11. 23.
# 19. [Magic Method] __call__() 필자는 pytorch를 다루면서 신기한 점이 있었다. 뭐.. 그렇게 대단한건 아닐 수도 있지만, 모델 클래스에 대한 인스턴스를 생성하면 해당 인스턴스를 마치 함수처럼 쓰는 것을... 맨 처음에는 별 다른 생각없이 다른 사람들의 코드를 보고 따라 썼다. 하지만, 쓰면 쓸수록 궁금증이 머리에서 맴돌았다. 어떻게 인스턴스를 함수처럼 사용하는 걸까? 결론은 매직 메소드 (magic method)에 있었다. 파이썬이라는 언어는 진짜 마법처럼 사전에 모든 클래스에 정의된 매직 메소드라는 것이 있다. 언더바(_)가 앞뒤로 붙은 메소드들을 볼 수 있을 것이다. 더군다나 pycharm을 사용한다면 특별히 다르게 색이 빛나는 메소드들을.. 위 스크린샷에서 볼 수 있다시피 predefined 라는 글자가 눈에 밟힌다.. '.. 2021. 11. 19.