본문 바로가기
Programming/Deep learning

Sigmoid 보다 ReLU 가 더 좋음

by OKOK 2018. 1. 17.

어느 값이 이상이면 액티베이션 함수라고 합니다. 이것을 구현하기 위해서 각각의 더블유 더블 1 2개에 웨이틀ㄹ 가지고 있습니다. 순자적으로 엑스를 받고 입력에 넣어주면 이단에 네트워크가 구성되는 것입니다. 3단 쉽습니다. 3단으로 3개의 웨이트를 주면 됩니다. 엑스 값이 2개이다 알 수 있습니다. 그 다음 단계에서 5개를 받아야 하고, 오케이요. 체인 하듯이 엑스 엘원 엘투를 만들어내고, 그 아므 레이어에 넣고 오케이요. 하나기 하나씩만들고하나씩 내어주면 됩니다. 그림으로 그려주면 이렇게 됩니다. 딥하고 와이드 하는 것에 대해서 알 수 있습니다. 인풋 레이어 라고 하고 마지막은 아웃풋 레이어라고 합니다. 그리고 이 안에 있는 것들은 보이지 않기 때문에 히든 레이어라고 합니다. 특별한 의미는 없습니다. 처음과 마지막만 신경쓰면 됩니다. 그리고 안의 숫자는 아무렇게나 사용해도 됩니다. 네네. 그 다음에 한 일이 무엇인가요. 연결만 시켜주면 됩니다. 체인을 연결시켜주면 됩니다. 엘1이 이렇게 연결되고 엘2가 이렇게 연결되고 이렇게 학습시키면 끝입니다. 네임스코프를 줍니다. 오케이 이름을 줍니다. 그 밑에 내가 원하는 레이어를 선언하게 되면 비쥬얼라이제이션을 할 수 있습니다. 만든 그래프를 시각화 할 수 있습니다. 딥 네트워크르 설계할 때 코드로만 보면 어려울 수 있는 이렇게 연결이 되어 있구나, 하면서 보고 잘 되는지 확인 할 수 있게 됩니다. 충분히 사용하면 됩니다. 실행시켜보도록 하겠씁니다. 코스트가 떨어지지 않고 정확도가 0.5가 나옵니다. 이상하게 9단으로 연결했는데.... 왜이러지요..... 한개한것과 똑같다.... 잘 못 돌린 것이 아니라, 같은 결과가 나옵니다. 왜 이런 일이 벌어질까요. 코스트하고 텐서보드를 통해서 보도록 하겠습니다. 백프로패게이션이라는 알고리즘 때문에 발생합니다. 86년동 생겼습니다. 이것을 사용하다 보니, 2, 3단 정도의 그래프트는 잘 학습이 되는데 오늘 사용한 것처럼 9~10단 사용하면 학습이 안되는 것입니다. 이 문제를 풀지 못했는데, 문제가 발생한 이유를 보도록 합니다. 


시그모이드의 값을 통과하기 떄문에 1보다 작은 값입니다. 이런 값들이 계속 곱해지게 됩니다. 그럼 이값이 어떻게 되나요. 0이 많이 붙게 됩니다. 굉장히 작은 값이 됩니다. 최종적인 출력에서 2~3단까지는 괜찮지만, 뒤로 갈 수록 최종 미분값을 0에 가까운 값이 됩니다. 이것이 바로 문제입니다. 베니싱 그레디언트 입니다. 앞단에 있는 형태의 최종단 근처의 경사나 기울기는, 단수가 깊어질 수록 앞쪽은 경사도가 사라집니다. 학습하기 어렵다. 오케이요. 이 문제 때문에 문제가 풀린다음에 2006년도 때문에 혹한기에 들어가게 됩니다. 


시그모이드를 잘 못 쓴 것 같다. 다른 것을 쓰면 좋을 것 같아. 이렇게 말을 합니다. 이렇게 풀어내기 위해서... 어떻게 해야하는지. 0보다 작으면 끄고, 0보다 크면 갈때 까지 갑니다. 이것이 바로 레루 입니다. Rectified Linear Unit 입니다. 시그모이드 대신에 렐루를 넣으면 됩니다. 코드로 만들고 싶으면 이렇게 만들면 됩니다. 시그모이드가 아닌 렐루 함수를 사용하면 됩니다. 렐루를 응요해서 리키렐룰 등 맥스아웃 이엘루 아크단젠트를 넣어보았습니다. 이렐루는 무엇인가요. 픽스하지 말고, 이렐루등이 있습니다. 맥스 아웃이 있습니다. 오켕요. 시그모이드의 단점이 있습니다. 극복을 해볼까. 탄에이치입니다. 이런 함수들이 있습니다.