텐서와 케라스, 그리고 비지도 학습
AI는 도구가 아니라 행위자라는 이야기와 "미션이 해자다"라는 사례로 문을 열었어요. 본론에서는 신경망이 쓰는 말인 텐서를 배우고, 케라스 몇 줄로 퍼셉트론(선형 회귀)과 다층 퍼셉트론(옷 사진 분류)을 직접 만들었어요. 마지막으로 정답 없이 패턴을 찾는 비지도 학습을 배웠어요.
보충 표시는 교수님 자료와 필기에 없는데 이해를 위해 더한 내용이에요.
용어 사전
이 노트에 나오는 줄임말이에요. 처음 보면 이 표로 돌아와서 확인하세요.
| 용어 | 뜻 |
|---|---|
| MLP | Multi 여러 + Layer 층 + Perceptron 퍼셉트론 퍼셉트론을 여러 층으로 쌓은 신경망 |
| MSE | Mean 평균 + Squared 제곱한 + Error 오차 틀린 정도를 제곱해서 평균 낸 점수 |
| SGD | Stochastic 무작위로 고른 + Gradient 기울기 + Descent 내려가기 데이터를 조금씩 보며 오차를 줄이는 기본 학습법 |
| Adam | Adaptive 알아서 조절하는 + Moment 추세 + estimation 추정 걸음 크기를 알아서 바꾸며 학습하는 인기 방법 |
| ReLU | Rectified 음수를 잘라 낸 + Linear 직선 + Unit 단위 0보다 작으면 0, 크면 그대로 내보내는 함수 |
| MNIST | Modified 고친 + NIST 미국 국립표준기술연구소 손글씨 숫자 사진 모음 (Fashion-MNIST는 옷 사진판) |
| API | Application 응용 프로그램 + Programming 프로그래밍 + Interface 연결 창구 프로그램끼리 일을 부탁하는 약속된 창구 |
| GPU | Graphics 그래픽 + Processing 처리 + Unit 장치 작은 계산 수천 개를 동시에 하는 칩 |
| TPU | Tensor 텐서 + Processing 처리 + Unit 장치 구글이 만든 텐서 계산 전용 칩 |
| K-means | K개 + means 평균 데이터를 K개 무리로 나누는 방법 (K-평균) |
| PCA | Principal 주된 + Component 성분 + Analysis 분석 많은 특징을 중요한 몇 개 축으로 줄이는 방법 |
1부. 오늘의 이야기: AI 시대의 언더독과 해자
1-1. AI는 도구가 아니라 행위자예요
수업은 역사학자 유발 하라리(Yuval Noah Harari)의 관점으로 시작했어요. 슬라이드의 핵심 문장은 "AI is an Agent, Not a Tool(AI는 도구가 아니라 행위자다)"예요.
망치나 계산기 같은 도구는 사람이 시키는 대로만 움직여요. 그런데 AI는 스스로 정보를 처리하고 스스로 결정할 수 있어요. 그래서 "쓰는 물건"이 아니라 "함께 일하는 주체"로 봐야 한다는 거예요.
하라리는 2024년에 낸 책 『넥서스(Nexus)』와 여러 인터뷰에서 "AI는 도구가 아니라 행위자"라는 말을 되풀이했어요.
슬라이드에는 몇 가지 경고도 함께 있었어요.
- 사람들은 남이 AI를 개발하는 것을 잘 믿지 않아요.
- AI로 생기는 경제적 이득의 약 70%를 중국과 북미가 가져갈 가능성이 커요.
- AI 개발을 사려 깊게 이끌지 못하면, 우리가 만든 시스템에 휘둘릴 수 있어요.
"70%"는 회계·컨설팅 회사 PwC가 2017년 보고서에서 내놓은 2030년 전망이에요. AI 덕분에 2030년 세계 경제(GDP)가 약 14%(15.7조 달러) 커지고, 그중 70% 가까이가 중국과 북미에 몰린다고 봤어요.
그래서 제목이 "AI의 마이너리그?"예요. 두 지역이 메이저리그라면, 한국 같은 나머지 나라는 마이너리그에 머무르게 될까 하는 질문이에요.
- AI는 스스로 처리하고 결정하는 행위자로 봐야 해요.
- AI 경제 이득의 약 70%가 중국·북미에 몰릴 수 있다는 전망이 있어요.
- "나머지는 마이너리그에 머물까?"가 오늘의 출발 질문이에요.
1-2. 언더독 시나리오
슬라이드의 질문은 "Underdog Scenario of AI?(AI의 언더독 시나리오는?)"예요. 언더독은 질 것이라고 여겨지던 약자예요. 언더독이 이기면 사람들은 더 크게 열광해요.
수업에서는 유튜브 영상 「샘 리처드 교수가 분석한 리센느 폭발적 역주행의 이유」를 함께 봤어요. 역주행은 나온 지 한참 지난 노래가 뒤늦게 다시 인기 순위에 오르는 거예요. 슬라이드도 이 그룹을 "언더독"이라고 불러요. 뒤늦게 크게 주목받은 약자의 이야기로 "큰 쪽만 이기는 건 아니다"라는 화두를 꺼낸 거예요. ▶ youtu.be/ZUJGS617-IE
샘 리처드(Sam Richards)는 미국 펜실베이니아 주립대학교의 사회학 교수예요. 리센느(RESCENE)는 2024년에 데뷔한 K팝 걸그룹이에요.
필기에는 "I understand what you need(당신에게 필요한 걸 알아요)"라는 말이 남아 있어요. 언더독이 이기는 길로 "상대가 정말 필요한 것을 정확히 알아주는 것"을 꼽은 것으로 보여요. 이 말이 어느 장면에서 나왔는지는 확인이 필요해요.
- 언더독 = 질 것이라 여겨지던 약자예요.
- AI 시대에도 작은 팀이 이길 길이 있을까가 질문이에요.
- 열쇠로 "상대가 필요한 것을 알아주기"가 언급됐어요.
1-3. 미션이 해자예요: VIZCOM
다음 영상은 「EP 101. "미션이 해자다" 800억 투자받은 AI 디자인 스타트업, VIZCOM의 성장 비밀」이에요. 슬라이드에는 비즈컴(VIZCOM) 창업자 조던 테일러(Jordan Taylor)가 나와요. ▶ youtu.be/3nHLrMOalkY
"Mission is the Moat!(미션이 해자다)"는 이런 뜻이에요. AI 기술은 금방 따라잡혀요. 하지만 "누구의 어떤 문제를 끝까지 풀겠다"는 분명한 미션은 쉽게 베낄 수 없어요. 그래서 미션이 가장 오래가는 해자가 돼요.
비즈컴은 산업 디자이너가 손으로 그린 스케치를 AI가 사실적인 제품 이미지와 3D로 바꿔 주는 서비스예요. 2025년 10월 시리즈 B 투자로 2,700만 달러를 받았고(라디컬 벤처스 주도), 디자이너 70만 명 이상이 쓴다고 밝혔어요. 영상 제목의 "800억"이 누적 투자를 원화로 바꾼 것인지는 확인이 필요해요.
필기에는 "개인 결제 앱 필요"라는 짧은 메모도 있어요. 앞뒤 맥락이 없어 무엇을 가리키는지는 확인이 필요해요.
- 해자 = 경쟁자가 따라오지 못하게 막는 장벽이에요.
- 기술은 따라잡혀도 분명한 미션은 베끼기 어려워요.
- 비즈컴은 디자이너를 위한 AI 도구로 성장한 사례예요.
2부. 텐서: 신경망이 쓰는 말
2-1. 텐서란 무엇일까요
교수님은 텐서를 물리 이야기로 꺼내셨어요. "내가 움직이는 속도와 상대방이 움직이는 속도가 어떤 관계일 때, 나는 상대의 움직임을 어떻게 보게 될까?" 이런 상대성이론의 문제를 풀 때 쓰는 수학 도구가 텐서예요.
오늘 수업의 핵심은 "우리가 아는 신경망은 텐서로 되어 있다"예요. 필기처럼 벡터는 시작점·끝·방향이 있는 화살표이고, 수평·수직 방향으로 나누어(성분으로 분해해) 숫자의 짝으로 적을 수 있어요.
텐서 Tensor
숫자 하나는 스칼라예요. 질량, 온도, 길이처럼 크기만 있는 양이에요. 텐서로 치면 랭크 0이에요.
숫자를 한 줄로 늘어놓으면 벡터예요. 속도나 가속도처럼 크기와 방향이 함께 있는 양이에요. (x₁, x₂)처럼 숫자의 짝으로 적고, 랭크 1이에요.
줄을 여러 개 겹치면 표 모양의 행렬(랭크 2)이 되고, 표를 또 쌓으면 3차원 이상의 텐서가 돼요. "랭크"는 숫자를 몇 방향으로 늘어놓았는지예요. 원래 텐서는 물리학 말이에요. 상대성이론의 메트릭 텐서, 물체 속 힘을 나타내는 응력 텐서가 대표적이에요.
숫자 하나를 놓으면 스칼라예요.
숫자를 한 줄로 놓으면 벡터예요.
줄을 겹쳐 표나 상자로 만들면 행렬·텐서예요.
| 비유 | 텐서 | |
| 달걀 한 알 | ↔ | 스칼라 (랭크 0) |
| 달걀 한 줄 | ↔ | 벡터 (랭크 1) |
| 달걀 한 판 | ↔ | 행렬 (랭크 2) |
| 달걀 판을 쌓은 상자 | ↔ | 3차원 텐서 (랭크 3) |
- 스칼라(0) → 벡터(1) → 행렬(2) → 텐서(3 이상)로 방향이 늘어나요.
- 랭크 = 숫자를 늘어놓은 방향의 수예요.
- 신경망과 데이터는 모두 텐서로 표현해요.
2-2. 데이터도 텐서예요
슬라이드의 제목은 "Data as a Tensor"예요. 컴퓨터 비전(사진 다루기)과 자연어 처리(글 다루기)에서 데이터는 모두 텐서로 들어가요.
| 데이터 | 어떻게 담나요 | 랭크 |
|---|---|---|
| 흑백 사진 1장 | 세로 × 가로 칸마다 밝기 숫자 하나 | 2 |
| 컬러 사진 1장 | 세로 × 가로 × 색 3개(빨강·초록·파랑) | 3 |
| 컬러 사진 여러 장 | 사진 장수 × 세로 × 가로 × 색 | 4 |
| 문장 여러 개 | 문장 수 × 단어 수 × 단어를 나타내는 숫자 줄 | 3 |
- 사진은 칸마다 숫자가 든 표(또는 상자)예요.
- 여러 장을 묶으면 랭크가 하나 더 늘어나요.
- 모양만 맞으면 같은 계산 규칙을 쓸 수 있어요.
2-3. 신경망도 텐서예요: 가중치와 행렬 곱셈
필기의 "인풋, 히든 노드 곱하기 웨이트"가 이 부분이에요. 신경망은 입력값, 가중치, 각 층의 출력값이 모두 텐서예요. 슬라이드는 이것을 이렇게 적어요.
| 기호 | 뜻 |
|---|---|
| x = (x₁, …, xₙ) | 입력 벡터 (데이터 한 개) |
| X = (x⁽¹⁾, …, x⁽ᵐ⁾) | 데이터 m개를 묶은 입력 |
| wji[l] | l번째 층에서 i번 입력이 j번 뉴런으로 가는 가중치 |
| z[l] | l번째 층 뉴런들에 들어가는 값 |
말로 풀면: 입력마다 가중치를 곱해 모두 더하고, 편향을 더한 값이 뉴런 j에 들어가요.
파라미터 Parameter
필기에 "파라미터 = 웨이트"라고 적혀 있어요. 맞아요. 연결선마다 붙은 가중치(weight)가 파라미터예요. 정확히는 뉴런마다 붙는 편향(bias)도 함께 세요.
그래서 파라미터 수는 "연결선 수 + 뉴런 수"로 셀 수 있어요. 층을 넓고 깊게 쌓을수록 파라미터가 빠르게 늘어나요.
요즘 큰 AI 모델은 파라미터가 수십억(billion)~수천억 개예요. 파라미터가 많을수록 더 복잡한 것을 배울 수 있지만, 계산과 저장에 돈이 더 들어요.
층과 층 사이의 연결선 수를 세요.
뉴런마다 하나씩인 편향 수를 더해요.
합이 그 신경망의 파라미터 수예요.
| 비유 | 신경망 | |
| 레시피에 적힌 양념 칸 | ↔ | 파라미터 자리 |
| 맛을 보며 소금·간장 양을 조절 | ↔ | 학습 = 파라미터 고치기 |
| 칸이 많은 복잡한 레시피 | ↔ | 파라미터가 많은 큰 모델 |
슬라이드는 행렬끼리 더하기, 숫자 곱하기, 전치(가로·세로 뒤집기)도 보여 줬어요. 예를 들어 2×4 행렬에 2를 곱하면 칸마다 2배가 되고, 3×2 행렬을 전치하면 2×3 행렬이 돼요. 그중 가장 중요한 건 행렬 곱셈이에요.
행렬 곱셈 Matrix Multiplication
신경망 한 층의 계산은 "입력 × 가중치를 모두 더하기"예요. 식으로는 zj = Σ wjixi + bj예요. 뉴런마다 이걸 따로 하면 너무 느려요.
그래서 입력을 벡터로, 가중치를 행렬로 묶어 행렬 곱셈 한 번으로 모든 뉴런을 계산해요. 데이터 여러 개도 행렬 X로 묶어 Z = wX처럼 한꺼번에 계산해요.
행렬 곱셈은 벡터의 내적(같은 자리끼리 곱해서 더하기)을 여러 번 한 거예요. 이런 계산을 동시에 아주 많이 해 주는 칩이 GPU와 TPU예요.
A의 1행 (1, 2)을 꺼내요.
B의 1열 (5, 7)을 꺼내요.
같은 자리끼리 곱해 더해요: 1×5 + 2×7 = 19. 이게 결과의 1행 1열이에요.
| 비유 | 행렬 곱셈 | |
| 품목별 수량 (사과 1, 배 2) | ↔ | A의 가로줄 |
| 품목별 가격 (5천, 7천 원) | ↔ | B의 세로줄 |
| 수량×가격을 모두 더한 총액 1만 9천 원 | ↔ | 결과 칸 하나 (19) |
- 신경망 계산 = 입력 × 가중치의 합 + 편향이에요.
- 이 계산을 묶으면 행렬 곱셈 한 번이 돼요.
- 파라미터 = 가중치 + 편향, 학습으로 고치는 숫자예요.
2-4. 텐서플로와 케라스
| TensorFlow (텐서플로) | Keras (케라스) | |
|---|---|---|
| 한 줄 뜻 | 텐서를 계산하는 엔진 | 텐서플로를 쉽게 쓰게 해 주는 창구(API) |
| 하는 일 | 텐서 계산, 기울기 자동 계산, CPU·GPU·TPU에서 실행, 여러 컴퓨터로 나눠 계산, 다른 환경(C++, 자바스크립트, TFLite)으로 내보내기 | 층(layer)을 블록처럼 쌓아 모델 만들기, compile·fit·predict 몇 줄로 학습과 예측 |
슬라이드 요약도 같아요. 신경망과 데이터는 텐서로 나타내고, 계산은 행렬 곱셈으로 하며, 행렬 곱셈은 벡터 내적의 확장이고, 텐서플로가 이 계산을 효율적으로 해 줘요.
- 텐서플로 = 텐서 계산 엔진이에요.
- 케라스 = 그 위에서 쉽게 쓰는 표준 창구예요.
- 기울기 계산과 GPU 사용은 엔진이 알아서 해 줘요.
3부. 퍼셉트론으로 선형 회귀 하기
3-1. 선형 회귀: 직선 찾기
슬라이드는 텐서플로와 케라스로 해 볼 세 가지를 소개했어요. 선형 회귀, 손글씨 숫자 인식, 이미지 인식이에요. 첫 번째가 선형 회귀예요.
선형 회귀 Linear Regression
슬라이드의 예는 아파트 크기와 판매 가격이에요. 크기가 커지면 가격이 오르는 관계를 직선 식으로 적으면, 새 아파트의 가격을 짐작할 수 있어요.
직선은 기울기와 y절편 두 숫자로 정해져요. 필기처럼 선형 회귀에서 가중치에 해당하는 건 이 2개뿐이에요.
퍼셉트론에서 출력 함수를 f(x) = x로 두면 출력은 wx + b예요. 바로 직선 식이에요. 그래서 퍼셉트론 하나로 선형 회귀를 할 수 있어요. w가 기울기, b가 y절편이에요.
데이터 점들을 그래프에 찍어요.
아무 직선으로 시작해 점과의 오차를 재요.
오차가 줄어드는 쪽으로 기울기와 절편을 고쳐요.
| 비유 | 선형 회귀 | |
| 흩어진 점 사이로 자를 대 보기 | ↔ | 직선 후보 정하기 |
| 자를 기울이고 올렸다 내렸다 | ↔ | 기울기 w, 절편 b 바꾸기 |
| 점들과 가장 가까운 자리에서 멈춤 | ↔ | 오차가 가장 작은 직선 |
- 선형 회귀 = 점들을 가장 잘 지나는 직선 찾기예요.
- 직선은 기울기와 절편, 가중치 2개로 정해져요.
- 출력 함수가 f(x) = x인 퍼셉트론이 곧 선형 회귀예요.
3-2. 비용 함수와 경사 하강법
평균제곱오차 MSE · Mean Squared Error
학습하려면 "얼마나 틀렸는지"를 숫자 하나로 알아야 해요. 이 숫자를 내는 함수를 비용 함수(또는 손실 함수)라고 해요.
평균제곱오차는 점마다 (예측 − 정답)을 제곱해서 모두 더하고, 점의 개수로 나눠요. 제곱을 하면 음수가 사라지고, 크게 틀린 것에 더 큰 벌점이 붙어요.
목표는 이 값이 가장 작아지는 가중치를 찾는 거예요. 필기의 "민스퀘어 에러 미니마이즈"가 이 말이에요.
점마다 예측 − 정답 (오차)을 구해요.
오차를 제곱해요.
모두 더해서 점 개수로 나눠요.
| 비유 | 오차 | |
| 화살이 과녁 중심에서 떨어진 거리 | ↔ | 오차 |
| 멀리 빗나갈수록 벌점이 훨씬 큼 | ↔ | 제곱 |
| 여러 발의 평균 벌점 | ↔ | 평균제곱오차 |
오차를 줄이는 방법은 2주차에 배운 경사 하강법이에요. 오차 그래프에서 내리막 방향으로 조금씩 가중치를 옮겨요.
말로 풀면: 새 가중치 = 지금 가중치 − (걸음 크기 η × 오차가 커지는 방향). 오차가 커지는 방향의 반대로 걸어요.
- 비용 함수는 틀린 정도를 숫자 하나로 바꿔요.
- 평균제곱오차는 오차를 제곱해 평균 내요.
- 경사 하강법으로 그 값이 작아지게 가중치를 고쳐요.
3-3. 케라스로 퍼셉트론 만들기
필기의 "케라스로 퍼셉트론… 추정 가능?"의 답은 네예요. 코드 몇 줄이면 돼요.
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])
model.compile(optimizer='sgd', loss='mean_squared_error')
xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)
model.fit(xs, ys, epochs=500)
print(model.predict([10.0]))| 줄 | 쉬운 말 |
|---|---|
| Sequential([Dense(units=1, …)]) | 뉴런 1개짜리 층 하나 = 퍼셉트론 하나 |
| compile(optimizer='sgd', loss='mean_squared_error') | 경사 하강법(SGD)으로, 평균제곱오차를 줄이며 배워라 |
| xs, ys | 공부할 점 6개 |
| fit(xs, ys, epochs=500) | 점 6개를 500번 반복해 공부해라 |
| predict([10.0]) | x = 10이면 y는? → 19에 아주 가까운 값 |
정확히 19가 아니라 18.98처럼 나오는 게 보통이에요. 점이 6개뿐이라 "거의 확실히 19"라고 배운 거예요.
에포크 Epoch
필기의 질문 "에포크? 는 뭐지"의 답이에요. 신경망은 데이터를 한 번 보고 끝내지 않아요. 같은 데이터를 여러 번 되풀이해 보면서 가중치를 조금씩 고쳐요.
코드의 epochs=500은 "점 6개를 500바퀴 돌며 공부하라"는 뜻이에요. 바퀴를 돌수록 오차가 줄어 y = 2x − 1에 가까워져요.
데이터가 많으면 한 번에 다 보지 않고 작은 묶음(미니 배치)으로 나눠 봐요. 케라스의 fit()은 이렇게 미니 배치 경사 하강법으로 학습해요. 묶음을 하나 볼 때마다 가중치를 한 번 고쳐요.
데이터 전체를 처음부터 끝까지 봐요.
보면서 오차를 줄이도록 가중치를 고쳐요.
이 한 바퀴를 정한 횟수(epochs)만큼 되풀이해요.
| 비유 | 학습 | |
| 문제집 한 권을 끝까지 풀기 | ↔ | 1 에포크 |
| 틀린 문제를 보고 풀이법 고치기 | ↔ | 가중치 업데이트 |
| 문제집을 5번 반복 | ↔ | epochs=5 |
- Dense(units=1) 층 하나가 퍼셉트론 하나예요.
- compile로 학습 방법과 오차 기준을 정해요.
- fit으로 에포크 수만큼 반복해 배워요.
3-4. 손글씨 숫자 인식: 퍼셉트론의 한계
두 번째 실습은 MNIST 손글씨 숫자(0~9) 사진이에요. 퍼셉트론처럼 직선(평면)으로 나누는 분류기도 정확도가 약 92%나 나와요.
하지만 슬라이드의 결론은 "실제로 쓰려면 성능이 더 좋아야 한다"예요. 100장 중 8장을 틀리면 은행 수표나 우편번호에는 쓰기 어려워요. 그래서 층을 쌓은 다층 퍼셉트론(MLP) 버전으로 넘어가요.
- 퍼셉트론 하나로도 숫자 인식 정확도 약 92%예요.
- 실무에는 부족해서 층을 더 쌓아요.
- 다음 부의 주인공이 다층 퍼셉트론이에요.
4부. 케라스로 다층 퍼셉트론 만들기
4-1. 실습 데이터: 패션 MNIST
필기의 "옷 관련된 거"가 Fashion-MNIST(패션 MNIST)예요. 독일 온라인 패션 회사 잘란도(Zalando)가 공개했어요.
| 항목 | 내용 |
|---|---|
| 사진 수 | 70,000장 (흑백) |
| 종류 | 10가지 옷·신발·가방 |
| 크기 | 28 × 28칸 (낮은 해상도) |
| 예 | 9번 = 앵클부츠 |
10가지 종류는 0 티셔츠, 1 바지, 2 풀오버, 3 드레스, 4 코트, 5 샌들, 6 셔츠, 7 운동화, 8 가방, 9 앵클부츠예요. 보통 6만 장으로 학습하고 1만 장으로 시험해요.
코드는 fashion_mnist.load_data() 한 줄로 학습용 사진·정답과 시험용 사진·정답을 한꺼번에 불러와요.
- 패션 MNIST = 옷 사진 7만 장, 10종류예요.
- 사진 한 장은 28×28 숫자 표예요.
- load_data() 한 줄로 불러와요.
4-2. 모델 쌓기: 시퀀셜·덴스·활성화 함수
케라스의 기본 생각은 이래요. 층(layer)이 딥러닝의 블록이고, 모델은 층을 이어 붙인 그래프예요. 가장 단순한 모델이 Sequential(시퀀셜)이에요.
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])Q. 시퀀셜? 왜 시퀀셜이에요?
A. "Sequential"은 "순서대로"라는 뜻이에요. 층을 위에서 아래로 한 줄로 쌓고, 입력 하나가 차례로 지나가 출력 하나가 나오는 모델이에요. 가장 단순해서 처음 배울 때 써요. 슬라이드의 트랜스포머처럼 갈래가 나뉘는 복잡한 모델은 다른 방식으로 만들어요.
이 모델은 은닉층이 하나인 2층 퍼셉트론, 가장 단순한 다층 퍼셉트론이에요. 입력 784칸 → 은닉 뉴런 128개(16개나 256개로 바꿔도 돼요) → 출력 10종류예요.
덴스 층 Dense Layer
"Dense"는 "빽빽한"이라는 뜻이에요. 앞 층의 값 하나하나가 이 층의 뉴런 모두와 선으로 이어져 있어서 그렇게 불러요.
사진을 넣기 전에 Flatten 층이 28×28 표를 784칸짜리 한 줄로 펴 줘요. 그다음 Dense(128)가 784개 값을 받아 뉴런 128개로 계산해요. 이게 은닉층이에요.
필기의 "덴스 레이어가 히든레이어"는 이 모델에선 맞아요. 다만 마지막 Dense(10)도 덴스 층이에요. 덴스는 연결 방식의 이름이고, 은닉·출력은 위치의 이름이에요.
Flatten이 사진을 784칸 한 줄로 펴요.
Dense(128)가 784개 값을 모두 받아 계산해요.
Dense(10)이 옷 10종류 각각의 점수를 내요.
| 비유 | 덴스 층 | |
| 모든 팀원이 모든 담당자에게 의견을 전달 | ↔ | 모든 입력이 모든 뉴런과 연결 |
| 담당자마다 의견마다 다른 무게를 둠 | ↔ | 연결마다 다른 가중치 |
| 담당자 128명이 각자 정리 | ↔ | 뉴런 128개의 출력 |
ReLU 활성화 함수 Rectified Linear Unit
뉴런은 "입력 × 가중치의 합"을 그대로 내보내지 않고 활성화 함수를 한 번 거쳐요. 이걸 거쳐야 신경망이 직선이 아닌 복잡한 관계를 배울 수 있어요.
ReLU는 가장 많이 쓰는 활성화 함수예요. 식은 f(x) = max(x, 0)이에요. 코드로 쓰면 "x가 0보다 크면 x, 아니면 0"이에요. 계산이 아주 단순해서 빨라요.
슬라이드에는 다른 활성화 함수도 있어요. S자 모양의 시그모이드 1/(1+e−x), −1과 1 사이로 누르는 tanh, 음수를 조금 남기는 리키 ReLU max(x, 0.1x)예요.
뉴런이 입력 × 가중치의 합을 구해요.
그 값이 0 이하면 0을 내보내요.
0보다 크면 그 값을 그대로 내보내요.
| 비유 | ReLU | |
| 물이 앞으로 흐르면 그대로 통과 | ↔ | 양수는 그대로 |
| 물이 거꾸로 흐르려 하면 막음 | ↔ | 음수는 0 |
| 밸브 덕분에 흐름에 방향이 생김 | ↔ | 신경망에 꺾임이 생김 |
소프트맥스 Softmax
마지막 Dense(10) 층은 옷 10종류마다 점수를 하나씩 내요. 점수는 아무 숫자라서 그대로는 "몇 % 확신하는지" 알 수 없어요.
소프트맥스는 점수마다 e점수를 계산해 전체 합으로 나눠요. 그러면 모두 0과 1 사이가 되고 합은 1이 돼요. 점수가 큰 것은 확률이 훨씬 더 커져요.
필기의 "10개의 유닛은 10개로 클래시파이 해 준다"가 이거예요. 출력 뉴런 10개가 옷 10종류의 확률을 하나씩 맡아요. 가장 높은 확률의 종류가 예측 답이에요.
점수마다 e점수를 계산해요.
그 값들을 모두 더해요.
각 값을 합으로 나누면 확률이에요.
| 비유 | 소프트맥스 | |
| 후보별 득표수 | ↔ | 출력 점수 |
| 득표수를 전체 표로 나눈 득표율 | ↔ | 확률 (합이 1) |
| 득표율 1등이 반장 | ↔ | 확률 1등이 예측 답 |
- Sequential = 층을 순서대로 한 줄로 쌓은 모델이에요.
- Flatten → Dense(128, ReLU) → Dense(10, 소프트맥스) 구조예요.
- 은닉층엔 ReLU, 출력층엔 소프트맥스를 써요.
4-3. 학습 설정: 옵티마이저와 손실 함수
model.compile(optimizer=tf.train.AdamOptimizer(),
loss='sparse_categorical_crossentropy')Q. 백프로파게이션으로 학습을 한다는 게 무슨 뜻이에요?
A. 역전파(백프로파게이션)는 출력의 오차를 거꾸로 거슬러 올라가며 "각 가중치를 어느 쪽으로 바꾸면 오차가 줄어드는지"를 계산하는 방법이에요. 그 계산 결과를 받아 실제로 가중치를 고치는 게 옵티마이저예요. 둘이 짝이 되어 학습이 돼요. 필기에 있는 3Blue1Brown 한국어 채널 영상이 이 과정을 그림으로 잘 보여 줘요. ▶ youtu.be/HKqdFQfXVhw▶ youtu.be/tIeHLnjs5U8
옵티마이저 Optimizer
역전파는 "가중치를 어느 쪽으로 바꾸면 오차가 줄어드는지"(기울기)를 알려 줘요. 실제로 가중치를 얼마만큼 옮길지는 옵티마이저가 정해요. 슬라이드 제목도 "역전파를 위한 옵티마이저 알고리즘"이에요.
가장 기본은 SGD(확률적 경사 하강법)예요. 기울기에 걸음 크기를 곱한 만큼 움직여요. RMSprop, Adagrad처럼 걸음 크기를 상황에 맞춰 바꾸는 방법도 있어요.
이번 실습에서는 Adam을 썼어요(필기: "아담을 쓴다"). Adam은 지나온 움직임의 추세와 기울기의 크기를 함께 보고 걸음을 알아서 조절해서, 따로 손대지 않아도 잘 작동하는 편이에요.
역전파로 각 가중치의 기울기를 구해요.
옵티마이저가 걸음 크기를 정해요.
가중치 = 가중치 − 걸음 크기 × 기울기로 고쳐요.
| 비유 | 학습 | |
| 발밑 경사를 느끼기 | ↔ | 역전파로 기울기 구하기 |
| 보폭을 정하는 등산 요령 | ↔ | 옵티마이저 |
| 경사가 완만해지면 보폭을 줄이는 노련한 등산객 | ↔ | Adam |
손실 함수도 고를 수 있어요. 슬라이드 목록은 MeanSquaredError(평균제곱오차), CategoricalCrossentropy, SparseCategoricalCrossentropy, BinaryCrossentropy, KLDivergence, CosineSimilarity 등이에요. 손실 함수는 가중치를 고칠 때 쓰는 피드백 함수예요.
교차 엔트로피 Cross Entropy
분류 문제의 출력은 확률이에요. 이때 쓰는 손실 함수가 교차 엔트로피예요. 식은 L = −Σ yj log f(zj)예요.
정답 칸의 y만 1이고 나머지는 0이라서, 결국 "−log(정답에 준 확률)"만 남아요. 정답에 0.9를 주면 벌점이 작고, 0.05를 주면 벌점이 커요.
실습 코드는 sparse_categorical_crossentropy를 써요. "sparse"는 정답을 [0,…,0,1] 같은 줄 대신 숫자 하나(예: 9 = 앵클부츠)로 준다는 뜻이에요. 계산하는 벌점은 같아요.
모델이 10종류의 확률을 내요.
정답 칸의 확률만 골라요.
−log(그 확률)이 벌점이에요.
| 비유 | 교차 엔트로피 | |
| 비가 왔는데 "비 올 확률 90%" | ↔ | 벌점 작음 |
| 비가 왔는데 "비 올 확률 5%" | ↔ | 벌점 큼 |
| 예보 실력이 늘수록 평균 벌점이 줄어듦 | ↔ | 학습이 잘됨 |
- compile()에서 옵티마이저와 손실 함수를 정해요.
- 역전파가 기울기를, 옵티마이저가 걸음을 맡아요.
- 분류에는 교차 엔트로피 손실을 써요.
4-4. 학습·평가·예측
model.fit(train_images, train_labels, epochs=5)
test_loss, test_acc = model.evaluate(test_images, test_labels)
predictions = model.predict(my_images)| 코드 | 쉬운 말 |
|---|---|
| fit(…, epochs=5) | 학습용 사진으로 5바퀴 공부해라 |
| evaluate(test_images, test_labels) | 처음 보는 시험용 사진으로 점수(정확도)를 매겨라 |
| predict(my_images) | 새 사진이 어떤 옷인지 10종류 확률로 답해라 |
예측 결과는 10칸짜리 확률이에요. 예를 들어 9번 칸이 가장 크면 "앵클부츠"라고 답한 거예요. 필기의 "테스트해 보니? 프리딕션?"이 이 단계예요.
슬라이드 요약처럼, 케라스는 텐서플로 위에서 딥러닝을 하는 표준 창구예요. 층은 가중치와 계산을 담고, 층을 모아 모델을 만들고, compile로 옵티마이저·손실·평가 기준을 고르고, fit으로 미니 배치 경사 하강법 학습을 하고, predict로 새 입력을 예측해요.
- fit = 학습, evaluate = 시험, predict = 실제 예측이에요.
- 안쪽 코드는 어마어마하게 복잡하지만 몇 줄로 쓸 수 있어요.
- 시험은 꼭 학습에 안 쓴 데이터로 해요.
5부. 비지도 학습: 라벨 없이 패턴 찾기
5-1. 라벨이 있을 때와 없을 때
필기의 첫 예는 이커머스예요. 미식축구를 좋아하는 사람들은 슈퍼볼을 보면서 맥주를 사는 것처럼, 취향에 따라 함께 움직이는 패턴이 있어요. 쿠팡이나 아마존의 "너와 비슷한 사람들은 이것도 샀어요" 추천이 이런 패턴을 쓴 거예요.
비지도 학습 Unsupervised Learning
지금까지는 "이 사진은 앵클부츠"처럼 정답이 붙은 데이터로 배웠어요. 이게 지도 학습이에요. 정답을 라벨(label)이라고 해요.
비지도 학습은 라벨이 없어요. 대신 "누구와 누구가 비슷하고 무엇이 공통점인지"를 보고 스스로 구조를 찾아요. 필기처럼 한쪽은 라벨이 있고, 한쪽은 없어요.
쓰임새는 크게 세 가지예요. 비슷한 것끼리 묶는 군집화, 특징을 줄여 단순하게 보는 차원 축소, 평소와 다른 것을 찾는 이상 탐지예요.
라벨 없는 데이터를 모아요.
비슷한 정도를 재서 패턴을 찾아요.
사람이 그 패턴을 보고 의미를 붙여요.
| 비유 | 비지도 학습 | |
| 친구들 이름표에 성격이 적혀 있지 않음 | ↔ | 라벨 없음 |
| 같이 노는 무리를 지켜봄 | ↔ | 패턴 찾기 |
| "운동 좋아하는 무리"라고 이름 붙임 | ↔ | 사람이 해석 |
Q. 공부에도 쓸 수 있어요? "이 문제도 틀렸어?"
A. 네. 나와 비슷하게 푼 학생들이 많이 틀린 문제를 찾아 "이 문제도 확인해 보세요"라고 추천할 수 있어요. 쇼핑 추천과 같은 원리예요.
- 라벨 = 정답이에요. 비지도 학습에는 없어요.
- 비슷한 사람끼리 묶어 개인 맞춤 추천을 해요.
- 군집화·차원 축소·이상 탐지가 세 가지 쓰임새예요.
5-2. 무엇이 "비슷한" 걸까요: 피처
피처 Feature
필기처럼 물체의 특징을 피처라고 해요. 과일이라면 색, 크기, 무게가 피처예요. 고객이라면 방문 횟수, 지출액, 사는 물건 종류가 피처예요.
같은 대상이라도 어떤 피처로 비교하느냐에 따라 무리가 달라져요. 색으로 묶으면 빨강·노랑, 크기로 묶으면 큰 것·작은 것이 돼요.
사람의 특징은 셀 수 없이 많아요(필기: "인피니트 디멘전"). 그중 몇 개의 중요한 피처를 고르는 게 핵심이에요. 단위와 크기 맞추기(스케일링)도 결과를 바꿔요.
비교할 피처를 골라요.
피처마다 단위·크기를 맞춰요(스케일링).
피처 값이 가까운 것끼리 "비슷하다"고 봐요.
| 비유 | 피처 | |
| 색깔별로 정리 | ↔ | 피처 = 색 |
| 계절별로 정리 | ↔ | 피처 = 계절 |
| 정리 기준에 따라 칸이 달라짐 | ↔ | 피처에 따라 무리가 달라짐 |
- 피처 = 비교할 특징이에요.
- 피처를 바꾸면 무리가 바뀌어요.
- 단위·크기 맞추기도 결과를 바꿔요.
5-3. 군집화: 비슷한 것끼리 묶기
필기처럼 "클러스터링을 해서 비슷한 종류를 찾는 것"은 상업적으로 아주 유용해요. 고객 무리마다 알맞은 프로모션을 줄 수 있으니까요.
K-평균 군집화 K-means Clustering
군집화는 비슷한 것끼리 같은 무리에 넣는 거예요. 무리의 기준은 우리가 고른 피처예요.
K-평균은 무리 수 K를 먼저 정해요. 그리고 "가까운 중심에 배정 → 중심을 무리의 평균으로 옮기기"를 되풀이해요. 중심이 더 움직이지 않으면 끝나요.
슬라이드의 말처럼 무리에 쓸모 있는 이름을 붙이는 건 사람이에요. 기계는 "1번 무리"라고만 알려 줘요.
무리 수 K를 정하고 중심을 아무 데나 놓아요.
점마다 가장 가까운 중심의 무리에 넣어요.
중심을 무리의 평균 위치로 옮기고 2~3을 되풀이해요.
| 비유 | K-평균 | |
| 반장 3명이 아무 데나 섬 | ↔ | 중심 K=3개 |
| 학생들이 가장 가까운 반장 쪽에 섬 | ↔ | 가까운 중심에 배정 |
| 반장이 자기 줄 가운데로 옮김 | ↔ | 중심을 평균으로 이동 |
- 군집화 = 비슷한 것끼리 같은 무리에 넣기예요.
- K-평균: 중심 놓기 → 가까운 중심 배정 → 중심 옮기기 반복이에요.
- 무리에 이름을 붙이는 건 사람이에요.
5-4. 차원 축소: 더 단순하게 보기
필기처럼 "축을 찾아내는 게 중요한데 어렵다"가 차원 축소의 핵심이에요. 가장 쉬운 방법이 PCA예요.
주성분 분석 PCA · Principal Component Analysis
차원 축소는 데이터를 더 적은 피처로 단순하게 보는 거예요. 필기처럼 "세상은 무지무지 복잡한데, 몇 개의 중요한 신호만 보고 예측하고 싶은" 거예요.
PCA는 그중 가장 쉬운 방법이에요. 피처들을 섞어 새 축(주성분)을 만들어요. 첫째 축은 데이터가 가장 넓게 퍼진 방향, 둘째 축은 그다음으로 넓게 퍼진 방향이에요.
필기의 예처럼 재무제표에는 숫자가 수백 개라 회사가 좋은지 한눈에 안 보여요. 중요한 몇 개 축으로 줄이면 "이 데이터가 가진 가장 중요한 것"을 짧게 설명할 수 있어요.
피처들의 값을 모아요(단위를 맞춰서).
데이터가 가장 넓게 퍼진 방향을 첫째 축으로 잡아요.
그와 겹치지 않는 다음 방향을 둘째 축으로 잡아요.
| 비유 | PCA | |
| 3차원 조각상 | ↔ | 피처가 많은 데이터 |
| 모양이 가장 잘 드러나는 방향에서 빛 비추기 | ↔ | 주성분 고르기 |
| 벽에 비친 2차원 그림자 | ↔ | 줄어든 데이터 |
- 차원 축소 = 더 적은 피처로 단순하게 보기예요.
- PCA는 가장 넓게 퍼진 방향부터 새 축을 만들어요.
- 복잡한 재무제표도 몇 개 축으로 요약할 수 있어요.
5-5. 이상 탐지: 평소와 다른 것 찾기
이상 탐지 Anomaly Detection
필기처럼 "평소 데이터는 대부분 이런데, 왜 이런 경우가 있지?" 하고 알려 줘야 할 때가 있어요. 공장 센서, 카드 결제, 서버 기록 같은 곳이에요.
이상 탐지는 평소 모습을 먼저 배우고, 거기서 멀리 떨어진 것을 표시해요. 라벨이 없어도 할 수 있어서 비지도 학습에 들어가요.
중요한 건 찾은 것이 곧 "문제"는 아니라는 점이에요. 슬라이드 말대로 이상한 사례는 조사할 후보예요. 드물지만 정상인 일, 측정 오류, 진짜 변화일 수 있어요.
평소 데이터로 보통의 모습을 배워요.
새 데이터가 보통에서 얼마나 먼지 재요.
많이 먼 것을 조사 후보로 알려요.
| 비유 | 이상 탐지 | |
| 늘 오던 손님이 늘 사던 걸 삼 | ↔ | 평소 패턴 |
| 처음 보는 사람이 현금 다발로 대량 구매 | ↔ | 이상한 사례 |
| "무슨 일이지?" 하고 살펴봄 | ↔ | 조사 후보로 표시 |
- 이상 탐지 = 평소와 크게 다른 사례 찾기예요.
- 찾은 것은 "문제"가 아니라 "조사할 후보"예요.
- 라벨 없이도 할 수 있어요.
5-6. 패턴은 사람이 해석해야 해요
같은 데이터도 설정을 바꾸면 다르게 보여요. 슬라이드는 K=2와 K=3으로 같은 데이터를 묶었더니 무리가 달라지는 모습을 보여 줬어요. 그래서 필기처럼 세 가지를 물어야 해요.
| 질문 | 뜻 | 필기 표현 |
|---|---|---|
| 피처 | 무엇을 기준으로 비교했나요? | "어떤 피처를 가지고 비교를 할거냐?" |
| 안정성 | K나 설정을 바꿔도 그 패턴이 계속 나오나요? | "다른 축에서 봐도 계속 유지가 되냐?" |
| 유용성 | 우리가 진짜 알고 싶은 질문에 도움이 되나요? | "경영 현상을 해석할 때 유용하게 쓰일 수 있느냐?" |
| 방법 | 하는 일 | 이런 질문에 |
|---|---|---|
| 군집화 | 비슷한 사례를 묶어요 | "어떤 고객 유형이 있을까?" |
| 차원 축소 | 표현을 단순하게 해요 | "수많은 지표 중 핵심 축은?" |
| 이상 탐지 | 드문 사례를 찾아요 | "평소와 다른 거래는?" |
- 패턴에 의미를 주는 건 사람의 판단이에요.
- 피처·안정성·유용성 세 가지를 꼭 확인해요.
- 질문에 맞는 방법(묶기·줄이기·찾기)을 골라요.
수업 영상 모음
필기와 강의 슬라이드에 나온 유튜브 링크예요. 제목을 누르면 열려요.
오늘 수업 전체 요약
| 부 | 한 줄 요약 |
|---|---|
| 1부 오늘의 이야기 | AI는 스스로 결정하는 행위자이고, AI 시대 작은 팀의 무기는 쉽게 베낄 수 없는 미션(해자)이에요. |
| 2부 텐서 | 데이터와 신경망은 모두 텐서로 담고, 신경망 계산은 행렬 곱셈이며, 텐서플로·케라스가 이를 대신해 줘요. |
| 3부 퍼셉트론과 선형 회귀 | 퍼셉트론 하나로 직선 y = 2x − 1을 찾고, 평균제곱오차를 에포크마다 줄여 가며 배워요. |
| 4부 케라스 MLP | Flatten → Dense(128, ReLU) → Dense(10, 소프트맥스)를 Adam과 교차 엔트로피로 학습해 옷 사진 10종을 분류해요. |
| 5부 비지도 학습 | 라벨 없이 군집화·차원 축소(PCA)·이상 탐지로 패턴을 찾고, 그 의미는 사람이 피처·안정성·유용성으로 판단해요. |
용어 색인
| 한글 | 영어 | 한 줄 뜻 | 나온 장 |
|---|---|---|---|
| 행위자 | Agent | 스스로 정보를 처리하고 결정하는 주체 | 1-1 |
| 언더독 | Underdog | 질 것이라 여겨지던 약자 | 1-2 |
| 해자 | Moat | 경쟁자가 따라오지 못하게 막는 장벽 | 1-3 |
| 스칼라 | Scalar | 크기만 있는 숫자 하나 (랭크 0) | 2-1 |
| 벡터 | Vector | 크기와 방향이 있는 숫자의 줄 (랭크 1) | 2-1 |
| 텐서 | Tensor | 숫자를 여러 방향으로 담은 상자 | 2-1 |
| 파라미터 | Parameter | 학습으로 고치는 숫자 (가중치·편향) | 2-3 |
| 편향 | Bias | 뉴런마다 더하는 숫자 | 2-3 |
| 행렬 곱셈 | Matrix Multiplication | 가로줄 × 세로줄을 곱해 더하기 | 2-3 |
| 텐서플로 | TensorFlow | 텐서 계산 엔진 | 2-4 |
| 케라스 | Keras | 텐서플로를 쉽게 쓰는 창구 | 2-4 |
| 선형 회귀 | Linear Regression | 점들을 잘 지나는 직선 찾기 | 3-1 |
| 비용 함수 | Cost Function | 틀린 정도를 숫자로 바꾸는 함수 | 3-2 |
| 평균제곱오차 | Mean Squared Error | 오차를 제곱해 평균 낸 점수 | 3-2 |
| 에포크 | Epoch | 데이터 전체를 한 번 다 보는 것 | 3-3 |
| 시퀀셜 모델 | Sequential Model | 층을 순서대로 쌓은 모델 | 4-2 |
| 덴스 층 | Dense Layer | 모든 값과 연결된 층 | 4-2 |
| ReLU | Rectified Linear Unit | 음수는 0, 양수는 그대로 | 4-2 |
| 소프트맥스 | Softmax | 점수를 합이 1인 확률로 | 4-2 |
| 옵티마이저 | Optimizer | 가중치를 고칠 걸음을 정하는 방법 | 4-3 |
| 교차 엔트로피 | Cross Entropy | 정답 확률로 매기는 벌점 | 4-3 |
| 비지도 학습 | Unsupervised Learning | 정답 없이 패턴 찾기 | 5-1 |
| 라벨 | Label | 데이터에 붙은 정답 | 5-1 |
| 피처 | Feature | 비교의 기준이 되는 특징 | 5-2 |
| 군집화 | Clustering | 비슷한 것끼리 묶기 | 5-3 |
| 주성분 분석 | Principal Component Analysis | 피처를 몇 개 축으로 줄이기 | 5-4 |
| 이상 탐지 | Anomaly Detection | 평소와 다른 사례 찾기 | 5-5 |