close_btn
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files 수정 삭제
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print Files 수정 삭제

2주차.jpg

이번 세미나 시간에는 다층신경망 그리고 텐서보드에 대해 알아보겠습니다.


슬라이드2.JPG

먼저, 저번 시간에 배운 단층신경망에 대해 복습을 하고, 다층신경망의 등장, 활성화 함수, 손실 함수를 학습하고, 이후 텐서보드를 사용하는 법에 대해 알아보겠습니다.


슬라이드3.JPG슬라이드4.JPG

퍼셉트론이란, 간단히 말하면, 여러 입력값들에 대해 0 또는 1을 출력하는 함수입니다. 퍼셉트론을 잘 만든다면, 여러 이진 분류를 구현해낼 수 있습니다.


슬라이드5.JPG

그 중, 예시로 Input2개인 단층 퍼셉트론은 위의 그림과 같이 표현됩니다.


슬라이드6.JPG

앞에서 본 퍼셉트론은 파라미터인 w1, w2, theta 값에 따라, 여러 기능을 할 수가 있는데, 그 중 하나로 or게이트로의 표현입니다. w1 = 0.5, w2 = 0.5, theta = 0.3의 값을 가지도록 하면, x, y값에 대해 or게이트와 똑같이 작동을 함을 표를 통해 알 수 있습니다.


슬라이드7.JPG

다른 예시로 and게이트 입니다. 비슷하게, w1 = 0.5, w2 = 0.5, theta = 0.7의 값을 가지도록 하면, x, y값에 대해 and게이트와 똑같이 작동을 함을 표를 통해 알 수 있습니다.


슬라이드8.JPG

Nand게이트 역시. w1 = 0.5, w2 = 0.5, theta = 0.7의 값을 가지면서, 부등호 방향을 반대로 하면,  x, y값에 대해 nand게이트와 똑같이 작동을 함을 표를 통해 알 수 있습니다.


슬라이드9.JPG

다음으로 델타규칙이라는 것을 배웠었는데, 퍼셉트론을 통해 출력되는 값과 실제 값을 비교하여 차이가 생길 경우, 그 차이를 퍼셉트론에 반영하여, 다음 번엔 좀 더 나은 출력값을 가질 수 있도록 학습을 시킨다는 것이 델타규칙입니다.


슬라이드10.JPG

단층 퍼셉트론으로 모든 것이 표현 가능할 것처럼 보였지만, xor게이트 앞에서는 무기력했습니다. Xor게이트는 그래프를 통해 보면, 어떤 식으로 선을 그려도, 분할이 불가능하다는 것을 알 수가 있습니다. 따라서, 이를 해결하기 위해 단층 퍼셉트론을 여러 층으로 쌓아 다층신경망을 만들게 되었습니다.


슬라이드11.JPG


슬라이드12.JPG

단층신경망과 다층신경망의 차이는 은닉층의 여부로 가려지게 됩니다. 단층신경망은 입력값을 받는 input layer출력값을 내보내는 output layer만 존재하는 반면, 다층신경망은 그 사이에 입력과 출력을 직접적으로 하지는 않지만, 중간 계산과정을 참여하게 되는 은닉층(hidden layer)가 존재하게 됩니다.


슬라이드13.JPG

위의 다층신경망 개념을 이용해 단층 퍼셉트론의 한계였던 xor게이트를 구현해보도록 하겠습니다.


슬라이드14.JPG

Or게이트의 경우 주황색으로 색칠된 영역을 1로 분류를 합니다.


슬라이드15.JPG

nand게이트의 경우 파랑색으로 색칠된 영역을 1로 분류를 합니다.


슬라이드16.JPG이 두 게이트가 모두 1로 분류하는 영역만 1로 분류하는 게이트를 만들 경우, 이는 xor게이트와 정확히 똑같이 작동하게 됩니다


슬라이드17.JPG

따라서, or게이트와 nand게이트의 결과를 and게이트에 입력한 결과를 출력하는 다층 신경망을 만들면, xor게이트가 될 것입니다.


슬라이드18.JPG

도식화 및 표로 표시하면 다음과 같이 됩니다.


슬라이드19.JPG

위처럼 층을 쌓아서 신경망을 구축하게 되면, 깊게 쌓을수록, 선형의 한계를 벗어나 비선형, 특이한 모형들에 대해 분류를 잘 할 수 있게 된다.


슬라이드20.JPG

퍼셉트론을 쌓고 쌓다보면, 위와 같이 복잡한 구조를 가지게 되는데, 현재 이런 방법으로 신경망을 구성하여, 이미지 분류, 텍스트 마이닝 등등 많은 일들을 해낼 수 있게 되었다.


슬라이드21.JPG


슬라이드22.JPG

다시 한번 or게이트를 보도록 하자


슬라이드23.JPG

Or게이트는 크게 두 부분으로 나눌 수 있다. 먼저, 가중치 값을 입력값에 곱한 뒤, 더하는 가중치 연산 과정




슬라이드25.JPG

그리고, theta값과 비교하여, 1과 0, 두 가지로 분류하는 활성화 함수 과정이다.


슬라이드26.JPG

활성화 함수는 스칼라값을 입력하면 스칼라값을 출력하는 함수로레이어 간에 입출력 형태를 맞춰주거나선형 함수로만 이루어진 신경망에서 비선형 함수인 활성화 함수를 사용하여비선형의 특성을 신경망에 지니게하는 역할을 가지고 있다.


슬라이드27.JPG

가중치 연산을 하는 일반 노드와 활성화 함수를 비교해 보았을 때일반 노드는 입력값이 N개지만활성화 함수는 1개이고일반 노드는 학습을 하는 파라미터가 존재하지만활성화 함수는 학습이 없이 계속해서 같은 역할을 수행한다.


슬라이드28.JPG

최초의 활성화 함수는 계단 함수이다앞의 or게이트에서사용되었던 것과 같이어떤 값(theta) 이상일 경우 gamma1반대의 경우 gamma2를 출력하게 하여이진 분류에 사용되거나신경망에 계단 함수의 성질을 넣어주고 싶을 경우 사용하게 된다.


슬라이드29.JPG

다음으로는 오랫동안 사용되어 왔지만, 현재에는 사용되지 않는 시그모이드 함수이다. 시그모이드 함수는 평균이 0.5이고, 0~1까지의 값을 출력하는 함수이다. 시그모이드 함수는 넓은 입력값을 0~1 사이의 값으로 반환해주고, 이진 분류 문제에서 각각이 선택될 확률로도 사용되는 등 많이 사용되었으나, 현재는 많은 문제점들이 발견되어 사용되지 않고 있다.


슬라이드30.JPG

대표적인 문제점으로 학습이 잘 되지 않는다는 것이 있는데, 시그모이드 함수의 그래프를 살펴보면, 그래프의 양 극단에서는 x값이 변하더라도, y값의 변화가 그리 크지 않음을 알 수 있다. 이는 학습에 사용되는 x값의 변화량 대비 y값의 변화량(gradient)이 매우 작음을 알 수 있는데, 이 때문에, 학습이 매우 더디게 진행된다. , 깊이가 깊어질수록 데이터의 양극화가 심해지고, 결과값이 항상 양수이기 때문에, 이후 배울 내용인 오차역전파 과정을 통하여 학습할 시, gradient값이 부호 편향적이게 된다. , 1보다 항상 작기 때문에, 신경망이 깊어질수록 오차역전파 과정동안 끊임없이 작아지게 되는 문제가 있다. 마지막으로, exp함수를 사용하기 때문에, 컴퓨터가 이를 계산하는 과정이 다른 선형 함수들에 비해 매우 느리기 때문에, 컴퓨터를 통한 계산 과정이 오래걸린다는 문제점도 가진다.


슬라이드31.JPG

앞의 시그모이드 함수의 문제를 해결하기 위해 나온 한 가지 함수로 하이퍼볼릭 탄젠트 함수가 있다. 형태는 매우 유사하나, 먼저 평균이 0이기 때문에, 결과값이 양수로 편향되어 있던 문제는 해결되었으나, 여전히 나머지 문제들(극단적인 데이터, 매우 작은 gradient)이 해결이 되지 않았다.


슬라이드32.JPG

이후, ReLu라는, 정말 간단한 모양의 함수이지만 놀라운 결과를 보이는 활성화 함수가 등장하게 되었다. 먼저 시그모이드 함수의 가장 큰 문제점이였던, 매우 작은 gradient값은 선형 함수이기 때문에, 1보다 큰 영역에서는 gradient가 다음 레이어로 그대로 전달이 되기 때문에, gradient에 대해서는 악영향을 주지 않게 되었고, 연산 속도 역시 exp에 비해 매우 빨라졌다. 비록 선형 함수의 꼴을 하고 있지만, 깊은 신경망에 여러 개의 ReLu 함수가 들어가게 되면, 비선형 함수와 비슷한 모습을 가지게 된다. 모든 것을 해결해줄 것 같은 ReLu이지만, 한 가지 단점이 있었는데, 0보다 작은 값을 출력하게 될 경우, 이 때, gradient0에 계속해서 머물 가능성이 생기게 되는데, gradient0을 가지게 되면, 해당 가중치는 학습이 완료되는 순간까지 0으로 남기 때문에, 학습이 이루어지지 않는다.


슬라이드33.JPG

그래서 그 ReLu함수의 단점을 보완하기 위해, 0보다 작은 영역에서 0이 아닌 매우 작은 x에 비례하는 값을 가지는 Leaky ReLu가 출현하게 되었다. ReLu의 장점을 가지면서도, 0이하의 값에서 가중치들이 죽어버리는 현상을 해결할 수 있었다.


슬라이드34.JPG

여기에서 더 일반화한, maxout이라는 활성화 함수가 있는데, 이 함수는 두 개의 선형 함수에 max함수를 덮어씌운 형태인데, maxout내의 w1, w2, b1, b2는 학습을 하는 파라미터로, 학습을 진행하면서, 최적의 형태를 찾는다. 최근(175월 기준)의 연구결과들에 따르면 maxout이 가장 좋은 성능을 낸다고 한다. 하지만, 그렇다고 무작정 좋은 것은 아닌 것이, 다른 활성화 함수에 비해 파라미터를 쓰기 때문에, 학습을 하는 파라미터의 수가 증가하게 된다는 단점 역시 있고, 상황마다 적절한 활성화 함수는 다를 수 있기 때문에, 무조건 maxout을 사용하는 것이 답이 될 순 없다.


슬라이드35.JPG


슬라이드36.JPG

다음으로 배울 것은 손실함수이다. 신경망은 데이터를 통해 학습을 한다는 것이 핵심인데, 그 데이터를 가지고 어떻게 학습을 하냐에 대한 해답이 바로 손실함수이다. 우리가 만든 신경망이 원하는 기능을 할 때와 현재의 차이를 함수로 정의하여, 차이값을 구하고, 그 값을 이용해서 신경망을 개선(gradient descent )시킨다.


슬라이드37.JPG

그 종류로 여러 가지가 있는데, 대표적으로 MSE(mean square error)부터, 분류 오차, 교차 엔트로피 등이 있다.


슬라이드38.JPG

이 세 함수 모두 주로 쓰이는 영역이 다르다. MSE의 경우, 제곱이 아닌 절대값을 사용하는 경우도 있고, 필요한 경우 그 이상의 차수로도 사용은 가능하다. 어떤 신경망을 만들든 그에 맞는 손실함수를 정의하여 사용하는 것이 중요한다.


슬라이드39.JPG

다음은 텐서보드에 대해 알아보자.


슬라이드40.JPG

텐서보드는 텐서플로우 라이브러리를 이용하여 모델을 만들고, 학습을 하고, 결과를 예측할 때, 그에 대한 기록(로그)를 읽어서 시각화를 해주는 장치이다. 위의 그림에서는 정확도가 학습 과정에 따라 어떤식으로 변했는지, 손실 함수는 어떻게 변했는지를 표시해 준 것이다. 이처럼 학습 과정을 시각화하여, 모델이 잘 만들어지고, 원하는대로 작업을 수행하는지 확인을 할 수 있다.


슬라이드41.JPG

그렇다고 그냥 원래 있던 코드를 돌리기만 해선 텐서보드에 나타나지진 않는다. 텐서보드가 읽을 수 있는 로그를 만드는 메소드들을 이용하여, 로그를 남겨야 하는데, 이는 위의 함수와 같이 여러 메소드들이 있다.


슬라이드42.JPG슬라이드42.JPG텐서보드가 읽을 수 있는 로그를 남기는 코드를 조금 더 자세히 살펴보면, 위의 코드는 텐서플로우 라이브러리를 이용하여 선형 회귀를 구현한 것이다. X, y를 데이터를 넣을 placeholder로 만들고, 학습할 파라미터인 W, b를 임의의 값으로 초기화 후 생성하고, 가설을 X * W + b로 정의하였고, 손실함수로 오차 제곱 합을 사용하였다. 그리고 trainloss를 최소화하는 방향으로(learning_rate = 0.01) 학습을 진행하도록 한다.


슬라이드43.JPG

이제, 텐서보드가 읽을 수 있는 로그를 남겨볼텐데, 먼저 tf.summary.histogram은 학습하는 벡터를 기록해주는 객체이다. 비슷하게, tf.summary.scalar는 학습하는 스칼라값을 기록해주는 객체이다Histrogram은 일반적으로 파라미터들을 기록할 때 사용되고, scalar는 손실 함수, 정확도 등을 기록하는데에 사용된다.


슬라이드44.JPG


슬라이드45.JPG


슬라이드46.JPG


슬라이드47.JPG

여기서 로그를 남길 주소를 정해주어야 하는데, 만약 “”으로 둔다면, 현재 코드가 실행되고 있는 위치에 저장이 된다. 위의 코드에서는 현재위치/logs/5 폴더에 저장이 될 것이다.


슬라이드48.JPG

이와 같이 코드를 삽입하면, 학습이 진행되면서 로그가 기록될 것이다.


슬라이드49.JPG

학습이 완료되면, 텐서보드가 읽을 수 있는 코드가 지정해준 경로에 남게 된다. 이 때 경로 및 파일 명에 한글이 들어가지 않아야 한다. 이 파일들만 있다면, 어디서든 텐서보드를 통해 학습 과정을 열람할 수 있다.


슬라이드50.JPG

이제 텐서보드를 구동시켜볼 차례인데, 텐서보드는 텐서플로우 라이브러리가 사용이 가능한 환경이라면 추가적인 설치없이 곧바로 사용이 가능하다. 먼저 cmd창을 켜보도록 하자(혹시 tensorflow사용하는데에 추가적은 것이 필요하면, 그 모든 것을 다 마친 상태에서 이어서 진행하여야 한다.)


슬라이드51.JPG

명령어를 tensorboardlogdir (로그가 저장된 경로) 같이 입력하면, 되는데, 이때, 주소를 절대 경로 혹은 상대 경로를 선택하여 입력하여 주면 된다.


슬라이드52.JPG


슬라이드53.JPG

실행이 되면, 위의 그림과 같이 port 6006과 함께 주소가 출력되는데, 이를 chrome 주소창에 입력을 하면 텐서보드가 실행이 된다. 그리고 주소와 상관없이 localhost:6006만 입력하여도 실행이 된다. 위의 그림처럼 WARNING이 여러 번 뜰 수가 있는데, 이는 로그 파일이 1개가 아니라 여러 개일 경우, 생기는 WARNING으로 사용하는데에는 지장이 없으니, 일단 무시를 하고 사용하도록 하자.


슬라이드54.JPG

텐서보드에는 7개의 탭이 있는데, 그 목록은 다음과 같다. SCALARS, IMAGES, AUDIO, GRAPHS, DISTRIBUTIONS, HISTOGRAMS, EMBEDDINGS


슬라이드56.JPG

Scalar 탭에서는 tf.summary.scalar를 이용하여 저장된 scalar값을 그래프로 보여주는데, 그 값이 여러 개일 경우, 여러 개의 그래프로 보여준다. 학습횟수에 따라, 변하는 스칼라값(손실 함수, 정확도)등을 볼 수 있다.


슬라이드57.JPG

IMAGES 탭에서는 모델 내에서 사용된 이미지를 볼 수 있다.


슬라이드58.JPG

GRAPH 탭에서는 학습 과정 그래프를 시각화해준다. 변수 간의 관계, 연산 과정 등이 상세하게 기재되어 있다. 각 영역을 클릭을 통해 조금 더 자세히 볼 수도 있다.


슬라이드59.JPG

DISTRIBUTIONS 탭에서는 tf.summary.histogram를 통해 기록이 된 파라미터에 대한 변화를 볼 수 있다. 왼쪽의 그래프 형태는 파라미터가 단 한 개의 값을 가질 때, 학습이 진행되면서의 변화를 나타낸 것이고, 오른쪽은 파라미터가 여러 개일 때, 그 분포를 색의 진하기를 통해서 진한 영역에는 많은 파라미터가, 연한 영역에는 적은 파라미터가 분포되어 있음을 나타낸다.


슬라이드60.JPG

HISTOGRAMS 탭에서는 distribution탭과 마찬가지로 tf.summary.histogram를 통해 기록이 된 파라미터에 대한 변화를 볼 수 있다.


슬라이드61.JPG

EMBEDDINGS 탭에서는 데이터를 2, 3차원으로 차원축소하여 시각화한 모습을 볼 수 있다. 차원축소 방식에 따라 선택할 수도 있고, 학습이 진행되는 과정을 볼 수도 있다.


슬라이드62.JPG  텐서보드 활용방안으로, 모델을 튜닝할, 어떤 hyper parameter를 가질 때, 좋은 성능을 내는지, 학습의 속도는 어떤지 등을 비교할 수 있다. 위는 MNIST데이터를 CNN을 이용하여 예측을 하는 모델에서 여러 종류의 hyper parameter에 따라 학습 횟수에 따른 정확도를 시각하한 것인데, 원하는 x값을 마우스 오버하면, 이미지의 검은 박스에서 상세한 값을 보여준다. 이를 통해 원하는 방식으로 작동하는 모델로 개선할 수 있다.


슬라이드63.JPG

텐서보드 내에 여러 가지 옵션들을 조정하여 조금 더 원하는 방식대로 로그를 살펴볼 수 잇는데, x축에 들어갈 값을 학습 횟수 뿐만 아니라, 학습에 걸리는 시간, 실제 시간 등으로 넣어서 비교 역시 가능하다.


슬라이드64.JPG

로그들이 많이 쌓이게 되면, 원하는 모델을 보기가 힘들어지는데, 자신이 원하는 모델만도 볼 수가 있다. 체크박스를 이용하여 원하는 모델들을 선택하면, 선택된 모델들만 그래프가 표시가 된다. 이는 distributions, histograms 탭에서도 동일하게 작동하고, graphs, embbedings 탭에서는 해당 모델에 대한 그래프, embbeding 결과를 볼 수 있다.


슬라이드66.JPG

Atachment
첨부파일 '65'

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5