[HUFSTUDY] 행렬 인수 분해

Uomnf97·2022년 7월 4일
0

+) 코드잇 강의 바로가기

본 정리내용은 코드잇 강의를 공부하며 함께 정리한 내용입니다! 더 정확하고 자세한 내용을 공부하기 위해서는 "코드잇 머신러닝 실전 강의를 참고해주세요!"

행렬인수분해

인수분해란? 다항식이나 자연수를 여러개의 인수의 곱으로 표현하는 수학개념

  • 행렬 인수분해란? 임의의 행렬 A가 있을때, 행렬 B * C로 표현할 수 있도록 여러개의 행렬 인수의 곱으로 표현한 것. 형태에 따라 여러가지로 표현된다.
    Ex) 행렬의 크기가 (5,3) 이라면 (5,2)X(2,3)의 형태로 나눠서 행렬을 인수분해 할 수 있다.

  • 행렬 인수분해와 추천 알고리즘 시스템 : 행렬 인수분해를 활용하면 추천시스템 행렬의 크기를 분gkf하여 작은 크기로 만들어 줄 수 있을 뿐만 아니라, 빈 값이 존재하여 예측이 필요할 경우, 나머지 값을 최대한 비슷하게 일치시키는 행렬곱으로 인수분해를 해주어, 빈 값을 예측할 수 있도록 만들 수 있고, 이를 추천시스템에 활용할 수 있다.

행렬 인수분해 속성 학습

  • 행렬 인수분해와 경사하강법 : A = BC로 나타낼 수 있는 행렬이 있다고 했을때, B, C에 임의의 값을 넣어 A'를 구하고 해당 A'와 A와 비교하여 loss function을 계산한다. 이후, loss function을 통해서 손실이 최소화 되는 방향으로 각 B,C의 값을 업데이트 한다. 그리고 이 과정을 반복하여 optimization을 하게 된다.
    • feature learning : 행렬 인수분해를 통해서 나눠진 행렬들을 학습하는 것을 말한다.

데이터 표현하기

  • 데이터 표현은 윗첨자와 아래첨자로 표현하며, 보통 위첨자
    를 훈련 샘플로, 그리고 아래첨자를 속성으로 표현하게 된다.

  • 위의 예시에서 movie4의 3번째 속성인 경우 i는 4, j는 3이 들어간다. 이와 같은 방식으로 표현하여 행렬을 만들어주고 필요에 따라 전치 등을 이용하여 행렬의 차원을 맞추어주어서 계산을 진행한다.
  • 변수의 데이터를 표현해줄때 실제로 점수를 주었는지도 원소별로 데이터를 저장하여, 학습과 테스트를 구분 할 수 있도록 한다.

손실 함수 & 경사하강법

  • 각 대응되는 원소 값의 예측값과 실제값의 차이를 제곱해주고, 행렬의 모든 원소에 대해서 더해주어 제곱오차값을 계산해준다.
  • 경사하강법 구현 : 편미분을 활용해서 경사하강법을 진행함

    경사하강법이란 ? 손실값이 최소가 되게 하기 위해서 손실이 가장 급격하게 감소하는 방향으로 학습이 진행되도록 하는 기법

행렬 인수분해 손실 함수 is not completely convex

경사하강법이 올바르게 진행하기 위해서는 손실함수가 convex(볼록)한 형태여야 한다. 하지만 행렬 인수분해의 손실함수는 여러가지 두개의 변수로 나누어져있기 때문에 다음과 같이 완벽하게 아래로 볼록하지 않다.

위와 같이 여러 개의 극소(local optimal)가 있고 이 중에서 가장 작은 점이 최소점(global optimal)이다. 따라서 값을 임의로 초기화하고 경사 하강법을 해도 손실을 가장 작게 만드는 값들을 찾는다는 것을 보장할 수 없다. 왜냐하면 극소로 수렴해도 더이상 내려갈 수 없기 때문이다. 하지만 여전치 Gradient를 이용하는 것이 사용하지 않는 경우보다 여전히 뛰어나기 때문에 해당 방식을 사용한다.

따라서 같은 알고리즘이라도 여러번 학습을 진행하여 가장 성능이 좋게 나온 모델을 사용하는 것이 현명하다.

과적합과 정규화

  • 과적합이란 훈련데이터에 지나치게 학습되어, 일반화된 결과를 얻지 못한 결과를 말한다. 분산이 높을 때 과적합이 되며, 테스트 데이터셋에 좋지 않은 성능을 가져온다.
  • 따라서 정규화 과정을 통해서 해당 값이 너무 overfitting 되지 않도록 해결해줄 수 있다. ( 분산이 큰게 이유이므로, 분산을 낮추도록 유도, L1, L2 정규화 이용)
  • 따라서 행렬의 인수분해 형태에서도 과적합문제가 발생할 수 있으므로, 각 행렬에 정규화 항을 두어 문제를 해결한다.

결론

  • A = BC 일때, B,C 각각을 해석하는 것은 불가능한 일이며, 최종적으로 A를 더 잘 예측하게 만들 뿐이다. 따라서 B,C에 의미를 추가로 부여하지 않도록 유의

  • 협업필터링으로,2006년 Netflix 영화/드라마 추천대회에서 matrix factorization에서 유명해졌으며, 협업필터링 중에서 가장 성능이 좋은 하나의 알고리즘이다.

  • 속성과 유저의 특성을 모두 살렸기에 두가지 장점을 가지고 있음

  • 알고리즘을 실험해 가장 좋은 방식의 알고리즘을 활용, 여러가지 알고리즘을 섞어서 사용(내용 기반, 속성 기반, 앙상블 모델 등등)하는 것이 효과를 높이는 방식이다.

참고 : 코드잇 머신러닝 실전 강의

profile
사회적 가치를 실현하는 프로그래머

0개의 댓글