[ Essay - Technology ] 바이브 코딩의 허와 실

이미지
지금 우리는 가히 AI 시대라는 패러다임의 전환에 시대에 살고 있다고 해도 과언이 아니다. 특히, IT 업계에서 대다수의 작업량을 차지하는 프로그래밍의 영역에서 생성 AI를 이용한 생산성 향상의 가능성이 보이면서 어느 분야보다 가장 빠르게 괄목적인 성과를 이루고 있는듯 하다. 고작 몇 년전에는 커서에 의해 프로그래밍을 AI에게 프로그래밍을 위임하는 것이 더 나을 수 있다는 것이 어느정도 증명되면서, 작년에는 Claude Code의 영향으로 인해 이러한 이슈가 좀 더 가속화되지 않았나 싶다. 이러한 굉장히 빠르게 이루어지고 있는 생성형 AI 솔루션의 발달은 개발자의 종말론을 더더욱 부각시키면서 업계 전반이 큰 변화를 겪고 있는 것으로 보인다. 특히 이러한 변화 속에서 “프로그래밍을 몰라도 생성형 AI만 있으면 제품을 만들 수 있다”는  주장도 자연스럽게 힘을 얻고 있다. 최근에는 Saas 솔루션은 종말할 것이라는 다소 파격적인 이야기도 들리는 것으로 보면 소프트웨어 업계가 큰 격변의 시기가 온것임에는 틀림 없어 보인다. 허(虛): 빠르게 만들 수 있다는 환상 이런 상황에서 가장 주목받는 주장들은 서론에서 언급했다시피 ‘프로그래밍을 알지 못한다고 하더라도  생성형AI를 이용하면 빠르게 제품을 개발이 가능하다’라는 주장이고, 실제로 이는 어느 정도 타당성이 있어 보인다. 정말로 움직이는 결과물을 단 몇초 만에 보여주기 때문이다. 하지만, 이러한 ‘빠르게 제품 개발 가능하다’는 주장의 가장 큰 맹점이 있는데 개발자의 존재 이유가 단순한 제품이나 기능개발에 있지 않다는 점이다. 만약, AI를 통해 그럴듯 한 솔루션을 만들었다고 치자. 이것에 얼마만큼의 비지니스성과 지속가능성이 있을까? 예컨대 AI에게 넷플릭스나 트위터, 인스타그램과 같은 페이지를 만들어달라고 요청한다면, 아마 실제로 그럴듯 하게 만들어 줄 것 이다. 이러한 인기 서비스들은 토이 프로젝트로 다루기 쉽고, 하나의 트렌드로 자리 잡아 관련 자료를 찾기도 어렵지 않다. 코드 또한 깃허브에 충분...

[ 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 ] 서버 사이드(Sever Side) ? 클라이언트 사이드(Client Side)? 1 [서론, 클라이언트 사이드(Client Side)]

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

[ Web ] 웹 애플리케이션 서버 아키텍처의 정의 및 유형 ( Define and Types of Web Application Server Architecture )