본문 바로가기
Programming/Deep learning

Softmax classification

by OKOK 2018. 1. 17.

기본적인 출발은 이렇습니다. 리턴하는 값은 실수가 될 수 있고 바이너리 클래스 피케이션의 2개 중에 하나는 0이나 1이나 하는지 적합하지 않았습니다. 그래서 생각한 방법이 하느이 제트라고 두고 지제트를 두고 이 함수가 큰 값을 압축을 해서 0이나 1사이에 둘 수 있습니다. 오케이요. 그래서 지 제트를 이런 함수 즉 이 제트 축에 값이 커지더라도 지 제트는 1보다 작은 값에 머물고 0보다 1사이에 머무르는 함수가 있으면 참 좋겠다 라는 생각을 한 것입니다. 이렇게 생긴 아름운 함수 시그모이드 함수라고 부르기도 합니다. 로지스틱 = 시그모이드 로지스틱 하이파시스는 이런 형태로 나타납니다. 간단하게 그림으로 표현하였습니다. 하나의 계산하는 유형이 이렇습니다. 나오는 값이 제트값이 됩니다. 아 이런 형태는 시그모이드 함수를 통과시킨다라는 의미이구나, 결과값을 0 과 1사이에 넣습니다. 와이의 햇이라고 많이 씁니다.  자, 그러면 로지스틱 클래스픽을 이렇게 나타냈는데, 직관적으로 보기 위해서 제와 엑스2를 가지고 있습니다. 분류해야 되는 것이 이렇게 있습니다. 데이터가 있습니다. 더블유를 학습한다. 학습시킨다 라는 것은 무엇인가. 구분하는 선을 찾아내는 것입니다.  하이퍼 플레인이라고도 하는데요, 학습하는 것입니다. 오케이요. 오 이렇게 멀티 노미얼을 낼 수 있습니다. 몇시간을 공부해고 수업을 몇번을 왔는데, 학점을 주자. 오케이 그 다음에 에이 베이 오케이요. 대략 그래프에 표시하면 이렇게 됩니다. 우리가 바이너리 클래스피케이션 2개의 사전에 예측하는 가지고도, 멀티 노미얼 분류가 가능합니다. 하이퍼 플레인을 나타냅니다. 2개의 케이스를 봅니다. 이런 것을 하나 만들어내고, 이렇게 해서 비 오얼 낫, 바이너리로 학습시키고 오케이요. 에이인지 아닌지만 구분해주는 3개의 각각 구별이 가능합니다. 이런 형태로 나타내게 되면 더블유 와이햇이 나온다고 가정합니다. 에이인지 아닌가만 확인하면 에이를 부르도록 합니다. 에이인지 아닌지 확인합니다. 똑같은 것을 3개만 가지면 됩니다. 주어진 엑스가 주어졌을때, 와이를 예측해내고, 실제로 구현 할때는 행렬로 구현합니다. 원했던 하이파시스 3번 독립된 벡터를 가지고 계산을 하면 됩니다. 조금 복잡하기에, 그래서 이것을 하나로 합친다음에 늘린다고 가정을 합니다.  


이 값들이 무엇인가요 원했던 가설 값들입니다. 가설 값들입니다. 가설 값들 입니다. 그래서 3개의 독립된 분류를 구현하지만 벡터로 처리하게 되면 한번에 계산이 가능하고, 이것이 3개 독립된 분류 처럼 동작을 하게 됩니다. 굉장히 간단합니다. 시그모이드를 처리하게 됩니다. 하는 방법은 여기다가 시그모이드 모듈을 적용하면 되겠습니다. 다음 비디오 에서는 오케이요.  2, 1, 0 볼 때는 에이인데, 시그모이드를 사용해서 이것이 여기에 있는 값들이 엄청난 값이 아니라 0~1 사이의 값으로 나오면 좋겠습니다. 다시하면 정리를 하면 소프트맥스 클래스파이어의 비용 함수 소프트 맥스의 함수를 사용하게 되면 이런 형태의 값으로 나타납니다. 스코어가 확률으로 나옵니다. 오 섬도 1로 되는 구나, 오케이요. 확률로 볼 수 있게 됩니다. 소프트맥스를 사용하게 되면 그렇게 되면 시가 되는 확률은 이렇게 됩니다. 실제로 골라서 원 핫 인고딩을 해서 가장 큰 값을 1로 하고 다른 것은 0으로 만들어 냅니다. 텐서플로우는 arg max  원 핫 인코딩이라고 합니다. 여기까지 됬으면, 그 다음음 단계가 하이파시스는 완성이 되었습니다. 코스트 함수를 설계해야 합니다. 코스트 함수를 최소화함으로써 학습을 완성하게 되는데요. 여기에서는 일단 어떤 식으로 사용하나요, 식이 크로스 엔트로피 라는 것을 사용하는데, 엘이 실제로 정답입니다. 실제 값 엘 예측해낸 값입니다. 오케이요. 오아이햇으로 합니다. 예측 값을 넣습니다. 어떻게 되는지 이렇게 생긴 크로스 엔트로피라는 함수를 이용해서 구하게 됩니다. 왜 이 함수가 동작이 작동하고, 적합한지 살펴보도록 하겠습니다. 엘리멘트의 곱이 됩니다. 오케이요. 마이너스 로그는 이렇게 됩니다. 록 함수는 이렇게 됩니다. 와이의 값이 어떻게 되고 어떻게 되고 간단하게 하기 위해서 2가지 레이블이 있다고 가정합시다. 에이 비가 있습니다. 시스템을통해서 예측하게 되면 벡터를 돌려주게 됩니다. 실제에 와이값이라고 합니다. 실제의 정답이 이렇게 됩니다. 예측이 틀렸을 때 큰값이 나오는 것은 코스트 함수 입니다. 오케이 이렇게 반대의 경우에도 마찬가지입니다. 


오케이 많은 경우의 트레이닝 데이터가 있을때, 생각을 해보도록 하겠습니다. 로지스틱 코스트 함수를 다룰 때 이렇게 됩니다. 오케이요. 이것이 사실상 크로스 엔트로피 였습니다. 오늘은 이런식으로 사용했습니다. 오늘은 시를 디로 표현했습니다. 오케이요. 와이값과 예측값이 존재합니다. 상당히 다르게 보이지만 같은 것입니다. 같습니다. 평균을 나오면 전체 코스트 평션을 이렇게 정의할 수 있습니다. 마지막 단계가 무엇인가. 코스트를 최소화하는 값 우는 더블유 벡터를 찾아내면 됩니다. 그레디언트 디센트 알고리즘을 사용하게 됩니다. 오케이요. 로스 오얼 코스트는 이렇게 밥그릇 모양으로 생겼다고 가정하고? 실제로 이렇게 생겼습니다. 경사면을 타고 따라 내려가면 이렇게 도달할 수 있습니다. 경사면은 이 함수를 미분하는 것입니다. 로스트 함수를 복잡하니, 미분하는 것은 다루지 않습니다. 미분이라는 것은 기울기를 나타내고 계산기를 통해서, 컴퓨터를 통해서 할 수 있습니다. 어떤 점에서 기울기를 타고 내려가는 값이 알파값으로 내려가면서 그만큼의 위치를 업데이트 하는 것입니다. 오케이요. 여기까지 하고 사실은 레그레션 분류를 모두 이해하였습니다. 


직접 구현 해보도록 하겠습니다. 많은 분들이 개발 중에 있습니다. 수업시간에 이야기 한것처럼 소프트맥스 함수는 여러개의 클래스피케이션을 할때 유용합니다. 바이너리 모다 여러개를 예측하는 것이 많습니다.  


학습할 웨이트를 구해서 스코어에 불과하기 떄문에 소프트 맥스로 불리는 펑션을 통과시키면 확률이 나오게 도비니다. 에이이다, 비다, 씨다, 확률이 이렇게 됩니다. 확률이 나오게 됩니다. 소프트맥스 펑션입니다. 확률을 모두 더하면 멋지게 표현이 가능합니다. 텐셔블러오로 어떻게 구현할 것인가. 매트릭스곱하기 더하기 하면됩니다.  오케이요. 로스 펑션을 이렇게 정으히쌔습니다. 쉽게 정의합니다. 이렇게 쉽게 정의한다음에, 오아기보하기 로그 곱하기 전체 구현을 보면 이렇게 볼 수 있습니다. 4개의 데이터가 있습니다. 이렇게 주어지고요, 와이는 왜 3개인가요. 원핫 인코딩 방법을 사용합니다. 2번째 자리만 핫하게 해줍니다. 오케이요. 원 핫 인코딩으로 표시를 합니다. 이값은 이렇게 나타내고 이것은 이렇게 나타냅니다. 오케이요. 클래스의 갯수, 더블유와 비 쉐이프를 주의해야 합니다. 오케이요. 입력되는 값 엑스의 값이 4개가 들어와있습니다. 나가는 값, 즉, 이것의 넘버의 클래스라고 할 수 있습니다. 3이니까 3이되겠습니다. 출력값이 같습니다. 이렇게 웨이트와 바이어스를 쉐이프를 주의해야 합니다. 오케이요. 엑스와 와이데이터를 넣어줍니다. 소프트맥스 클래스파이까지 학습시킬 수 있습니다. 새로운 값을 던져준다음에, 예측을 하게 합니다. 오케이요. 출력을 해보면 이렇게 3개의 값이 나옵니다. 뒤에가 붙어있어서, 복잡해보이긴 하지만, 작은 값들 입니다. 전체의 합은 1이 됩니다. 이것이 가장 크기 때문에, 2번째 있는 값이 나오게 됩니다. arg_max 입니다. 아그 맥스의 어레이를 주면 어떤 2번째가 가장 높기 떄문에 1을 돌려주게 됩니다. 축의 기준은 첫번째 엑시스 입니다. 오케이요. 


여러 개를 질문을 넣어줍니다. 오케이.  arg_max를 사용하게 됩니다. 오케이. 레이블로 바꾸어보았습니다. 크로스 엔드토피, 원핫 리 쉐이프를 사용해서 펜시한 것을 만들어보도록 하겠습니다. 소프트맥스 클로스엔트로피 윗 로지스트를 사용하겠습니다. 오케이요. 주어진 엑스에 대해서 웨이트를 매트릭스로 곱하고, 바이어스를 더하고 오케이. 기본적인 폼. 로짓이라고 부릅니다. 이 로짓을 소프트 맥스로 통과시키는 하이퍼시스를 돌아옵니다. 스코어 로짓이라고 부리기도 합니다. 이렇게 하나음에 로스를 계산합니다. 스코어를 가지조 소프트맥스를 통과시키면 확률로 계산되어 나옵니다. 이것을 동과시키는 것입니다. 로짓으리라고 부르고 이것을 소프트맥스 또는 확률이라고 부릅니다. 그러면 이것을 가지고 크르소 엔트로피 로스를 계산했습니다. 원 핫이라고 주어졌습니다. 로그 값을 곱하기만 하면 됬습니다. 합만 했습니다. 나온 값들을 너체 평균을 냈습니다. 코스트가 되었습니다. 이것을 간소화하기 위해서 소프트 맥스 크로스 엔트로피 로짓이라고 합니다. 하나는 레이블 입니다. 오이와 로짓을 불러들입니다. 이 값을 넣어줍니다. 이렇게 설계하였습니다. 반드시 기억해야 합니다. 평균을 내개 되면 코스트가 만들어졌습니다. 다리가 몇개인지 뿔이 있는지, 특징이 있는지, 차아냅니다. 거기에 따른 분류가 있습니다. 0 에서 6까지 총 7가지 종으로 분류할 수 있습니다. 이것을 가지고 학습할 수 있습니다. 꼬리가 몇개이다 무엇이다. 어떤 종인지 살펴보도록 합니다. 데이터를 로드 택스트를 해서 읽어옵니다. 원핫으로 바꾸기 위해서 텐셔플로우의 원핫이라는 함수를 사용합니다. 원핫에는 와이값은 보통 0에서 움직이는 숫자입니다. 그리고 몇개의 클래스가 있는지 알려줍니다. 행렬 리쉐이프 하는 과정이 있습니다. 이것을 맞춰보도록 합니다. 맞는 것인지 확인한다음에, 맞으면 정확도를 출력하도록 합니다. 오케이요. 과정이 비슷비슷합니다. 학습이 모두 끝났다. 그럼 학습 넣고 엑스데이터만 넣고 얼마나 나오는지 살펴보도록 합니다. 리스트를 만들어서 예측한 값이 만드는지 살펴보는 것입니다. 트루 펄스로 만들어내는 것입니다. 원래 와이의 값 이렇게 표현을 할 수 있습니다. 복잡하긴 했지만 재밌는 표현을 사용해보았습니다. 스텝이 돌면서 로스가 줄어들게 됩니다. 그리고정확도가 높아지게 됩니다. 종을 맞춰보자 했을때 맞출 수 있습니다. 이 부분을 보면 예측이 맞았는지 오케이요. 실제 에측한 것과 실제의 값을 출력해 보았습니다. 오, 정확하게 맞췄습니다. 굉장히 잘 예측한다는 것을 볼 수 있습니다.