[ Architecture, Technology ,Web ] SSO(Single Sign On) 그리고 SAML에 대해

이미지
이번 프로젝트 내부에서 어쩌다보니  유저 인증 관련 업무를 담당하게 되었고, 해야하는 업무는 내부에 사용했던 적이 없던  새로운 개발 플랫폼에서  SSO의 프로토콜 중  SAML을 이용해 앱의 인증을 구현해야만 했다. SSO를 생각해본적 조차 없는 상황에 이를 새로운 개발 플랫폼에 도입해야 했기 때문에 많은 시행착오를 겪었으나 구현에 성공하였으며 덕분에 SSO에 대한 전반적인 지식을 쌓을 수 있었다. 이번에는 그러한 과정에서 나온 지식들과 경험을  공유하고자 한다. SSO에 대한 정의 먼저 사전적 정의 부터 살펴보자. 다만, 기술적인 용어다보니 자주 사용하는 옥스포드 사전에 정의를 찾을 수 없기 때문에  검색으로 찾을 수 있는 정의를 몇 가지 살펴보고 교차 검증을 해보자. 첫 번째 정의를 살펴보자. Single sign-on (SSO) is an identification method that enables users to log in to multiple applications and websites with one set of credentials.  SSO는 웹사이트에서 한 번의 인증(one set of credentials)으로 복수의 어플리케이션에 로그인 할 수 있는 인증(identification) 방법(method) 이다. 두 번째는 위키피디아의 정의이다. Single sign-on (SSO) is an authentication scheme that allows a user to log in with a single ID to any of several related, yet independent, software systems. SSO는 독립적이지만 연관되어있는 몇몇 소프트웨어에 대해 하나의 ID로 로그인을 할 수 있도록 하는 인증 구조(scheme) 세부 설명에 조금 차이가 있어 보이지만 전체적인 틀은 매우 비슷해 보인다.  몇 가지 포인트가 되는 단어를 추출해 이를 연결해보자면 아래와 같은 의미를 산출 할 수 있다. 독립적이지만 연관되어 있

[ Math, Computer Science, Machine Learning, NN ]교차 엔트로피(Cross Entropy)에 대해 : 기본 개념, 교차 엔트로피에 대한 이해



이전 까지 해서 엔트로피가 무엇이고,
이에 대한 이해를 위해 이야기를 나누어봤다.

이제는 본격적으로 이번 주제의 목표이기도 한 
교차 엔트로피에 대한 이야기를 해보자.

교차 엔트로피에 대해


이전 포스트로 부터
엔트로피란, 정보량이기도 하지만
컴퓨터의 근본을 이루고 있는 단위인 비트이기도 하고
원문이 있고 이를 예와 아니요를 통해 원문을 알아내야 할때
이 원문을 하나 씩 보낸다고 했을 때의 
원문 속의 하나를 얻어내기 위해 필요한 질문의 갯수 
즉,  비트의 갯수 이기도 하다.

이에 랠프 하틀리는 이 값을 구할 수 있는 방정식을 제시 했고,
아래와 같은 방정식으로
이 비트의 갯수를 H로 했을때 이에 대한 값을 구할 수 있다.

하지만, 이는 어떤 사건에 대해 나올 수 있는 확률이
모두 동일 할 때 성립하는 방정식으로
이 때 최대의 엔트로피를 얻어낼 수 있다.

예컨데, 동전 던지기를 할 경우 
앞면, 뒷면의 각각 50%일 경우에 성립 한다.

그렇기 때문에 어떤 사건에 대해 나올 수 있는 확률들이 
상이한 현실 세계에서 이를 이용하기에는 무리가 있다.

이에 대해 클로드 섀넌은 
정보의 불확실성에 대해 포인트를 잡고
해당 사건에 대한 평균 불확실성(엔트로피)를 구하는 방정식을 
아래와 같이 제시 했다.


여기 까지가 이전 포스팅에서 다루었던 내용이다.

그렇다면 교차 엔트로피란 무엇일까?

사실 꽤 나 간단한 개념이다.

교차 엔트로피는 메세지의 길이에 대한 엔트로피를 의미 한다.

교차 엔트로피에 대한 이해


이전 엔트로피에서 사용한 예를 조금 바꿔서
산출 값을 간단하게 하기 위해 눈의 수가 6개가 아닌
눈의 수가 8개인 주사위를 던진다고 가정하고,
확률들도 정수 값들이 나오게끔 최대한 수정하겠다.

엘리스는 자신이 던진 주사위의 결과를 보내려한다.
정보 하나 당, 평균 몇 만큼의 비트를 보내야할까?


경우의 수가 8개 되니, 아래와 같이 꽉찬 3비트가 될 것이다.

1(000), 2(001), 3(010), 4(011),
5(100), 6(101), 7(110), 8(111)

이에 대해 교차 엔트로피를 구하면 아래와 같다.

이 3비트라는 값이 교차 엔트로피이다.

즉, 엔트로피가 실제 확률에 의한 실제 엔트로피 값이라면
교차 엔트로피는 메시지 길이에 따라 예측된 엔트로피 값이다.

이제 밥이 실제 받게 되는 엔트로피의 값을 계산해보자.

이 경우의 엔트로피 값은


본래 -를 곱하기 때문에 -를 제외한다면 약 2.3비트로 
엘리스는 3비트를 보내지만, 
실제로 밥은 2.3비트(엔트로피)를 받게 될 것이다.

0.7만큼 손실이 일어난 것이다.

손실을 줄일 수 있는 방법이 있을까?

엔트로피는 줄일 수 없지만,
교차 엔트로피의 값을 조정할 수는 있다.

예측이야 언제든 변경할 수 있으니깐 말이다.

예컨데 조금 바꿔서 1~4일 경우에는 3비트를 
5~8일 경우에는 4비트라고 가정해보자.

그 경우 아래와 같다.

1(000), 2(001), 3(010), 4(011)
5(1000), 6(1010), 7(1100), 8(1110)

이 경우의 교차 엔트로피의 값은


밥의 엔트로피는 약 2.3비트이기 때문에 
약 1비트 만큼이 손실이 나게 된다.

이전 비트의 손실이 0.7인것에 비해 좀 더 손실이 증가한 것이다.

조절이 적절하지 못했다는 뜻이다.
정확히 말하면 낮은 빈도로 나오는 데이터 쪽에 
비트 수가 많게 조절 했다.

즉, 손실이 늘어난 것은 비트 수를 늘린 4~8 눈의 숫자는 
1~4에 비해 확률이 매우 낮기 때문이다.

따라서 그 만큼 손실 값이 늘어난 것은 어찌 보면 당연한 것이다.

이번에는 나올 확률이 반대로 높은 1과 2를 1비트로 줄여보자.

가장 높은 확률을 2비트나 줄였기 때문에 
온도차가 확연하게 드러날 것 이다.

1(0), 2(1), 3(010), 4(011)
5(1000), 6(1010), 7(1100), 8(1110)

이 경우 교차 엔트로피의 값은 아래와 같다.


예측 값을 조절한 결과 차이만을 놓고 본다면 
약 0.3비트의 차이만을 보이고 있다.

값의 변화를 보면 알 수 있듯이
대상의 실제 확률이 높은 것의 비트 수를 낮추면
불확실성이 낮아지기 때문에 교차 엔트로피의 값이 줄어들고

대상의 실제 확률이 낮은 것의 비트 수를 높이면
불확실성이 높아지기 때문에 교차 엔트로피의 값이 늘어나는 것을 확인할 수 있다.

물론 위의 예는 올바른 계산법이 아니다.

왜냐하면 수학적으로 엔트로피 값은
교차 엔트로피의 보다 클 수 없다고 하기 때문이다.

위의 예는 교차 엔트로피의 조절에 대해 설명하기 위해
과격하게 값들을 변화시킨 조금 억지에 가까운 예이기 때문이다.

조금 과격한 방식으로 설명했지만,
이것이 바로 교차 엔트로피(Cross Entropy)이고,
교차 엔트로피의 역할이다.

위의 주사위가 나올 확률 p가 실제 확률 분포이고 
메시지 길이에 따른 예측된 확률 q가 예측된 확률 분포일 때,
이를 수식으로 나타낸다면 아래와 같이 정의 내릴 수 있다.




엔트로피와 교차 엔트로피에 대한 이해


지금 까지 엔트로피와 교차 엔트로피에 대한 이야기를 했다.

그렇다면, 더 나아가 둘 간에는 어떤 차이점이 있을까?

재미있게도 조건에 따라 같을 수 있다.

엔트로피 방정식



교차 엔트로피 방정식


상단은 엔트로피 방정식을 나타내며이고,
하단은 교차 엔트로피 방정식을 나타낸다.

단순히 보기만 해도, 로그 안쪽의 p가 q로 바뀐 것 말고는 없어 보인다.

위에서 이야기 했듯이, 
p는 실제 확률 분포이고 q는 예측된 확률 분포이다.

여기에 힌트가 있다.

즉, 실제 확률 분포가 예측된 확률 분포가 같다면
엔트로피 값과 교차 엔트로피의 값이 같을 수 있다는 이야기가 된다.

반대로 확률 분포가 일치하지 않는다면,
교차 엔트로피의 값이 엔트로피의 값보다 더 크게 된다.

따라서 예측된 결과 값인 교차 엔트로피의 값을 
조절해서 엔트로피의 값에 최대한 가까이 갈 수 있다면
최적의 값을 얻어낼 수 있다.

교차 엔트로피 값과 엔트로피의 값이 차이
즉, 위에 예를 본다면 교차 엔트로피 3비트와 
실제 엔트로피 2.3비트의 차이인 0.7을
일반적으로 Kullback-Leibler Divergence 라고 부르며 
줄여서 KL Divergence라고 한다고 한다.

결국 엔트로피의 값과 KL Divergence의 값의 합이 

위와 같이 교차 엔트로피가 되는 것으로 결론을 지을 수 있다.

마치며


지금까지 해서 엔트로피와 
교차 엔트로피에 관해 모든 설명을 끝 마쳤다.

왜 뉴런 네트워크에서 손실 함수로써 
교차 엔트로피를 사용하고 있는지에 대해 
약간 부족하지만 어느 정도 직감을 가질 수 있을 것이라 기대해 본다.

다음에는 이 직감을 완성시키기 위해 
왜 뉴런 네트워크에서 교차 엔트로피를 사용하는지에 대해 명확히 해보자.


이 블로그의 인기 게시물

[ Web ] 웹 애플리케이션 아키텍처 (Web Application Architecture)

[ Web ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]

[ Web ] 웹 애플리케이션? 웹 사이트?(Web Application? Web Site?)