728x90
반응형

💬 왜 "데이터 적재와 전처리"를 따로 배우는 걸까?

딥러닝 모델은 데이터를 먹고 자랍니다.
데이터 없으면 아무것도 못 합니다.

문제:

초창기에는 사람들이 작은 데이터셋으로만 실험했음.
(예: MNIST 손글씨 6만장, CIFAR-10 이미지 5만장)

👉 데이터를 메모리에 "한 번에" 다 올려놓고 학습하면 됐었습니다.

하지만 현실에서는?

  • 데이터가 너무 큼. (1억 장 사진, 10억 개 로그 기록)
  • 메모리에 한 번에 못 담음. (RAM 16GB, 데이터 1TB...)

해결해야 할 문제:

  1. 메모리에 다 올릴 수 없는데 어떻게 모델에 먹일까?
  2. 디스크에서 읽을 때 속도가 느리면 학습이 멈추는데 어떻게 할까?
  3. 파일이 여러 개면 어떻게 효율적으로 읽을까?
  4. 데이터가 편향돼 있으면 학습이 이상해지는데 순서를 어떻게 섞을까?

 

📌 그래서 등장한 것

👉 TensorFlow tf.data.Dataset API

  • 데이터를 조각조각 나눠서 메모리로 가져오고
  • 한 줄씩 읽거나, 몇 개씩 묶어서 신경망에 보내고
  • 미리 준비해서 신경망이 굶지 않게 하고
  • 랜덤하게 섞어서 다양하게 학습하도록 도와주는

데이터 전용 파이프라인.

 

1️⃣ tf.data.Dataset.from_tensor_slices()

  • 작은 데이터를 메모리에 다 넣을 수 있을 때 사용.
  • 예를 들어, 이미지 1만 장, 레이블 1만 개 → 작은 텐서에 저장 가능.

왜 만들었을까?

  • 딥러닝 라이브러리는 모든 걸 "Dataset" 객체로 통일해서 처리하고 싶음.
  • 그래야 shuffle, batch, repeat 같은 작업을 일관되게 할 수 있음.

어떻게 동작해?

  • 큰 텐서를 조각조각 나눠서 한 줄씩 꺼낼 수 있게 만듦.

2️⃣ repeat(), batch(), map()

왜 필요할까?

  • repeat()
    → 데이터가 한 번만 있으면 훈련 다 못 함. 여러 번 반복해야 함.
  • batch()
    → 딥러닝은 여러 개 데이터를 한꺼번에 처리할 때 성능이 좋음. (GPU 병렬처리)
  • map()
    → 원본 데이터를 그대로 쓰면 안 되고, 전처리해야 함. (예: 정규화, augmentation)

3️⃣ shuffle(buffer_size)

왜 섞어야 할까?

  • 학습할 때 같은 패턴만 계속 나오면 모델이 편향(bias)됨.
  • 예를 들어, 집값 예측 데이터가 지역별로 정렬돼 있다면?
    • 싼 동네만 계속 학습하다가
    • 갑자기 비싼 동네 나오면 모델이 못 맞추지 못함.

shuffle()이 해결하는 것:

  • 무작위로 데이터를 섞어서 모델이 고르게 다양한 데이터를 보게 해줌.
  • buffer size로 메모리 크기 조절

4️⃣ 메모리가 부족할 때: 파일 여러 개로 쪼개기 + interleave()

왜 파일을 나눌까?

  • 하나의 파일이 너무 크면
    • 읽는데 시간이 오래 걸림.
    • 디스크 입출력이 bottleneck(병목) 걸림.

그래서

  • 데이터를 여러 파일로 쪼갠다.
  • 동시에 여러 파일을 읽는다.
  • **interleave()**를 쓰면 한 줄씩 번갈아 읽을 수 있다.

interleave() 핵심:

  • 파일 A, 파일 B, 파일 C를
  • 한 줄 A, 한 줄 B, 한 줄 C 식으로 번갈아 가져옴
  • 학습이 훨씬 다양해지고 빨라짐.

5️⃣ prefetch(1)

왜 필요할까?

  • GPU는 아주 빠름.
  • CPU가 데이터를 준비 못하면 GPU가 놀게됨 (시간 낭비).

prefetch()가 하는 일:

  • "현재 배치를 학습하는 동안"
  • "다음 배치를 미리 준비해서 기다리게 함"

그래서
→ GPU를 최대한 쉬지 않고 100% 사용 가능.

전체 흐름 정리

 

 

  • 데이터가 너무 커서 메모리에 다 못 올린다.
  • Dataset API로 파일을 조각조각 읽는다.
  • repeat를 해서 모델이 잘 학습할 수 있게 csv 파일을 중첩시킨다.
  • interleave로 파일마다 한줄씩 읽는다.
  • shuffle을 해서 데이터를 섞고 buffer size를 통해 메모리의 크기에 맞춰준다.
  • map으로 전처리(정규화, 파싱 등)를 해준다.
  • prefetch로 다음 배치를 미리 준비해서 GPU를 계속 굴린다.
  • 만들어진 데이터셋을 model.fit() 에 바로 넣어서 훈련한다.

 

비유하자면 !

 

  • Dataset API = "자동으로 데이터 요리해주는 주방"
  • 모델 = "배고픈 손님"
  • batch = "한 접시에 여러 음식 담기"
  • shuffle = "음식 순서를 무작위로 섞기"
  • map = "요리사가 음식에 소스 바르기"
  • prefetch = "손님이 먹고 있는 동안 다음 음식을 준비"

 

주요 동작들

from_tensor_slices() 텐서를 dataset으로 변환
map() 각 데이터를 전처리하는 함수 적용
shuffle() 데이터 순서 섞기
batch() 여러 데이터를 묶기
repeat() 데이터 반복
interleave() 여러 파일에서 한 줄씩 번갈아 읽기
prefetch() 다음 데이터를 미리 준비하기

 

 

# shuffle(buffer_size)

dataset = dataset.shuffle(1000)

✅ 내부 동작:

  1. 데이터를 1000개까지 메모리 버퍼에 쌓음
  2. 그 중 랜덤하게 하나 꺼내서 반환
  3. 새 데이터를 하나 읽어와서 다시 버퍼에 채움
  4. 반복

이걸 통해 모델이 데이터 순서에 과적합하지 않게 도와줌.

✅ seed를 주면?

  • 매번 같은 셔플 순서를 보장 → 디버깅할 때 유용

# interleave()

 
dataset = filepath_dataset.interleave(
    lambda filepath: tf.data.TextLineDataset(filepath).skip(1),
    cycle_length=5
)

✅ 내부 동작:

  • filepath_dataset에 여러 파일 경로가 있을 때
  • 동시에 5개를 열고, 각 파일에서 한 줄씩 번갈아 읽음

✅ 중요한 옵션:

  • cycle_length: 동시에 몇 개의 파일을 읽을지
  • block_length: 한 파일에서 몇 줄씩 읽고 다른 파일로 넘어갈지
  • num_parallel_calls: 병렬 읽기 개수

📌 왜 쓰냐?

  • 데이터를 다양한 파일에서 균형 있게 읽고, IO 병목을 줄이기 위해

 

728x90
반응형
728x90
반응형


데이터 입력부터 가중치 업데이트, 그리고 테스트까지 어떤 순서로 진행되는지 알아보려고 합니다.
이 글에서는 딥러닝의 학습 전 과정에 대해, 특히 Activation FunctionOptimizer의 역할을 확실히 구별하여 전체 흐름을 이해하기 쉽게 정리했습니다.

1. 딥러닝 학습의 전체 흐름 요약

  1. 데이터 입력
  2. 순전파 (Forward Propagation)
  3. 손실 함수 계산 (Loss)
  4. 역전파 (Backpropagation)
  5. 옵티마이저로 가중치 업데이트
  6. 위 과정을 여러 Epoch 반복
  7. 학습 완료 후 테스트 데이터로 성능 평가

2. Step by Step 자세히 설명

1️⃣ 데이터 입력 및 전처리

  • 학습에 사용할 데이터를 모델에 넣습니다.
  • 예: 이미지 → 픽셀 값, 텍스트 → 임베딩 벡터 등
  • 표준화 등을 통해 전처리를 합니다.

2️⃣ 순전파 (Forward Propagation)

입력 데이터를 이용해 초기 예측값(y^hat)을 계산하는 과정입니다.

🔸 2-1. 가중치 연산

       z=w⋅x+b

🔸 2-2. 활성화 함수(Activation Function)

       a = f(z)

  • ReLU, Sigmoid, Tanh 등 사용
  • 선형으로 z를 계산한 뒤에 출력값에는 비선형성을 부여하여 복잡한 문제 해결 가능

이 과정이 여러 레이어(뉴런들)들을 거치면서 반복됩니다.

3️⃣ 출력층 → 예측값 도출

  • 마지막 레이어에서 초기 예측값 을 출력
  • 마지막 레이어에서는 Softmax (분류), Linear (회귀) 등 사용

4️⃣ 손실 함수 계산 (Loss Function)

  • 예측값과 실제값 사이의 오차를 계산합니다.

        L=loss(y,y^hat)

  • 예:
    • 이진 분류: Binary Cross-Entropy
    • 다중 분류: Categorical Cross-Entropy
    • 회귀: Mean Squared Error (MSE)

5️⃣ 역전파 (Backpropagation)

이제 이 Loss를 기준으로 각 파라미터(w, b)에 대해 미분을 시작합니다. 손실 값을 줄이기 위해 각 가중치가 얼마나 영향을 줬는지 계산합니다. 

  • 가중치에 대한 미분, bias에 대한 미분
  • 핵심은 "출력층부터 입력층으로 거꾸로" 가는 것 입니다.

6️⃣ 옵티마이저(Optimizer)로 가중치 업데이트

경사(gradient)를 이용해 파라미터를 조정합니다.

  • SGD

  • Adam, RMSProp 등은 이 과정을 더 정교하게 개선

7️⃣ Epoch만큼 반복 학습

  • 위 과정을 전체 데이터셋에 대해 수천~수만 번 반복
  • 모델이 점점 똑똑해짐!
 
model.fit(x_train, y_train, epochs=10)

8️⃣ (선택) Validation으로 중간 성능 확인

  • 학습 중 과적합 여부 확인
  • 조기 종료(Early Stopping), 학습률 조정 등에 사용
model.fit(x_train, y_train, validation_data=(x_val, y_val))

 

9️⃣ 테스트(Test) 데이터로 성능 평가

학습에 사용되지 않은 데이터를 이용해 모델의 일반화 능력 평가
 
test_loss, test_accuracy = model.evaluate(x_test, y_test)
print("Test Accuracy:", test_accuracy)
  • 역전파 ❌ 없음
  • 가중치 업데이트 ❌ 없음
  • 순전파만 수행하여 예측값을 출력

3. 정리

Activation Function 뉴런의 출력 결정, 비선형성 부여
Optimizer 손실을 줄이기 위해 파라미터 업데이트
Epoch 전체 데이터셋을 1번 학습하는 단위
Test 단계 학습에 사용되지 않은 데이터로 성능 확인

이 글 하나로 딥러닝의 학습과 테스트 전 과정을 흐름을 이해하셨길 바랍니다.
감사합니다!

728x90
반응형
728x90
반응형

 

최근 취업 시장이 어려워짐에 따라 학부생들이 학부연구생이나 석사 지원 관련해서 교수님들께 컨택을 많이 하는 것 같습니다.

 

그래서 학부연구생, 대학원, 인턴 컨택을 전부 해본 경험을 바탕으로 메일을 쓰는 법을 포스팅 해보려고 합니다.

 

<Digst 하계인턴 후기>

https://itpro-1.tistory.com/5

 

[후기] 2024년도 Dgist 대학원 하계인턴 후기, 정보, 꿀팁

결론부터 말하자면, 정말 좋은 경험이었다. 5주란 시간이 짧지 않은 시간인데, 엄청 빨리 지나간 것 같다. 디지스트 하계인턴을 알게된 계기는 학과 선배의 추천이었다. 학과 선배가 동계인턴

itpro-1.tistory.com

 

1. 디지스트(DIGST) 하계 인턴 컨택

컨택을 하기 전 DIGST 하계 인턴 지원서를 먼저 작성했습니다.

 

하계 인턴 지원서 안의 내용은 : 사진, 학력사항, 학점, 참여 희망 학과 연구실 1~3지망, 희망분야지원사유, 자기소개서

 

이렇게 있습니다. 희망 분야 지원 사유와 자기소개서는 전부 한페이지 정도만 작성했습니다. 

 

희망 분야 지원 사유는 1지망 교수님의 연구실 홈페이지에서 연구하시는 내용들을 바탕으로 적어냈습니다.

 

그리고 당시에 국제사회문제와 연결지어서 풀어냈습니다.

 

자기소개서에는 학부때 학생회를 하면서 학부생활을 열심히했다. 저의 열정을 보이는 내용과 전공을 잘 이해하고 있다. 라는 내용을 좀 융합해서 적었습니다.

 

이렇게 지원서를 작성했으면, 메일에 지원서, 성적증명서, 재학증명서 이렇게 3개를 메일에 첨부했습니다.

 

가장 중요한 메일은 제가 실제로 교수님께 드린 메일을 바탕으로 템플릿을 만들어 보았습니다.

 

제목 : [DGIST 하계인턴] 2024년도 DGIST 하계인턴 모집 관련하여 메일 드립니다 !

 

~ 교수님께,

교수님 안녕하세요. 저는 ~대학교 ~과 ~학년에 재학 중인 ~이라고 합니다.
3학년 여름방학을 의미 있는 시간으로 채워보고 싶어, 연구실 인턴을 찾아보던 중 이번 DGIST 하계인턴을 접하게 되었습니다.

 

DGIST 하계인턴에는 다양한 분야를 연구하시는 교수님들이 계시지만, 교수님이 연구하시는 내용들을 보고 제가 공부하고 있는 분야와 매우 일치하다고 생각하여 이렇게 연락 드리게 되었습니다.
 
현재 스스로 ~ 등을 공부하고 있고 ~기술 관련 자료들을 찾아보면서 공부하고 있습니다.
만약, 이번 여름에 뵙게 된다면, 성실하고 열정 있게 연구에 임하겠습니다 !
읽어주셔서 감사드리며, 점점 더워지는 날씨에 항상 건강하시길 바랍니다.
 
**현재 학점은 아래와 같습니다.
총 학점  :   ~/4.5  
전공 학점 : ~/4.5 입니다.

 

~ 올림

 

 

이렇게 적어서 메일 드렸습니다. 제가 지원했을 당시 성적이나 스펙을 보고 싶으시면 제 블로그에 해당 내용이 있으니 한번 확인 해보시면 좋을 것 같습니다.(그렇게 높진 않습니다..)

 

메일을 드리면서 가장 중요한 점은 제목 앞에 [ ] 대괄호로 무슨 내용의 메일인지 적는 것이 중요하다고 생각합니다.
 
안그래도 하루에 메일을 수십통씩 받으시는 교수님이신데, 열심히 쓴 메일이 스팸함에 들어가면 그것만큼 슬픈 일도 없을테니까요.
 
답장은 확답은 아니고 그냥 유심히 지켜보시겠다. 라고만 오셨고 감사하게도 합격했었습니다.
 

2. 자대 학부연구생 컨택

 

[개인 면담요청] ~과 학번 이름 입니다.

~ 교수님께,

 

안녕하세요, 교수님. 저는 ~학교 ~학과 ~학년에 재학 중인 ~입니다.

 

최근 ~ 분야에 큰 흥미를 느껴, 좀 더 심도 있게 공부하고 싶다는 생각이 들었습니다.

그래서 ~대학교에서 ~을 연구하시는 연구실을 찾던 중 교수님의 ~ 연구실을 알게 되어 이렇게 연락 드리게 되었습니다.

 

현재 저는 ~ 관련 내용을 공부하며 자격증 취득도 준비하고 있습니다.

또한, 캡스톤 프로젝트로도 ~ 관련된 주제를 다루고 공부하고 있습니다! 

 

교수님께서 괜찮으시다면, 교수님의 연구실에서 학부 연구생으로 활동할 수 있을지 직접 찾아뵙고 상담을 받을 수 있을지 여쭤보고 싶습니다.

 

읽어주셔서 감사드리며, 점점 추워지는 날씨에 항상 건강하시길 바랍니다.

 

**현재 학점은 아래와 같습니다.

  • 총 학점: ~/4.5
  • 전공 학점: ~/4.5

감사합니다.

 

~ 드림

 

이렇게 메일 드렸었고 아쉽게도 분야가 조금 달라서 들어가지 못했습니다.

 

3. 타대 대학원 석사 컨택

 

석사 컨택은 CV, 자기소개서, 성적증명서, 재학증명서 이렇게 첨부하였습니다.

 

자기소개서는 제가 연구실의 무슨 연구에 관심이 있는지, 열정에 대해서도 한페이지 정도 적었습니다.

 

CV는 좀 열심히 적었습니다.


인터넷 찾아보면 양식이 많은데, 저 같은 경우에는 학부에서 했던 대외활동, 경험 자질구래한거 다 집어넣었습니다.

 

그게 저의 열정이라고 생각했습니다. 그리고 디지스트 인턴 한번 갔다온 것이 좀 도움이 됐던 것 같기도 합니다.

 

아래는 제가 직접 보낸 메일입니다.

 

 

대학원 진학 희망하여 문의드립니다. - [이름 / ~대학교 ~학과]

안녕하세요, ~ 교수님

 

저는 ~대학교 ~학과 ~학년에 재학 중인 ~입니다. ~에 깊은 관심을 가지고 석사 진학을 준비 중입니다.
해당 분야에서 연구를 수행하며 어떠한 기여를 할 수 있을지 고민한 끝에, 저의 경험과 아이디어를 바탕으로 몇 가지 가능성을 떠올려 보았습니다.
 
이전 학기에는 ~환경에서 ~ 활용해 ~를 해결한 경험이 있습니다.
더 나아가, ~하는 연구를 구상하고 있습니다.
 
저는 ~에서 교수님의 지도 아래 이와 같은 연구를 심화하고, ~에 기여하고 싶습니다. 가능하시다면 교수님의 연구 및 ~연구실의 진학에 대해 간단히 이야기를 나눌 수 있는 기회를 부탁드리고 싶습니다.
 
바쁘신 와중에도 시간을 내어 이 메일을 읽어주셔서 진심으로 감사드립니다. 아래에 제 학부 성적과 연락처를 남겨드리오니, 답변 주시면 정말 감사하겠습니다 !

 

 
평균 평점: ~
전공 평점: ~
 
감사합니다.
~ 올림
 
[이메일]
[번호]

 

 

이렇게 메일 드렸었고 감사하게도 교수님과 얘기가 잘 되어서 지금 공부중에 있습니다.

 

추가적으로 궁금한 점이 있으시면 댓글로 남겨주세요.

 

시간 되는대로 답장 해드리겠습니다..!

 

 

728x90
반응형
728x90
반응형

전이 학습이란?

전이 학습은 한 문제에서 학습된 지식을 관련된 다른 문제에 적용하는 기법입니다. 사람으로 비유하자면, 피아노를 배운 사람이 기타를 더 빨리 배울 수 있는 것과 같습니다. 기존에 습득한 지식과 경험이 새로운 분야를 익히는 데 도움이 되는 원리죠.

딥 러닝에서는 이미 훈련된 모델의 일부(주로 하위 층)를 가져와 새로운 모델에 적용하고, 새로운 데이터로 미세 조정하는 방식으로 이루어집니다.

 

 

전이 학습의 장점

  1. 적은 데이터로도 좋은 성능: 새로운 작업에 대한 데이터가 적어도, 기존 모델의 지식을 활용하여 좋은 성능을 낼 수 있습니다.
  2. 훈련 시간 단축: 처음부터 모델을 훈련시키는 것보다 훨씬 빠르게 모델을 개발할 수 있습니다.
  3. 더 나은 일반화: 전이 학습은 종종 더 나은 일반화 성능을 제공합니다.

 

딥러닝 모델의 구조 이해하기

전이 학습을 이해하기 위해 딥러닝 모델의 구조를 간단히 알아봅시다:

  • 입력층: 데이터가 모델에 들어가는 첫 관문입니다.
  • 은닉층(Hidden Layers): 여러 계층으로 이루어진 중간 처리 단계입니다.
    • 하위 은닉층: 기본적인 패턴(선, 모서리, 색상 등)을 인식합니다.
    • 상위 은닉층: 더 복잡한 패턴(눈, 코, 입 등의 특징)을 인식합니다.
  • 출력층: 최종 결과를 내보내는 층입니다.

 

전이 학습의 기본 과정

  1. 기존 모델 선택: 비슷한 유형의 문제를 해결한 사전 훈련된 모델을 선택합니다.
    • 예: 이미지 분류라면 ImageNet으로 훈련된 ResNet, VGG 등이 있습니다.
  2. 층 재사용 결정: 일반적으로 하위 은닉층은 그대로 가져오고, 상위 은닉층과 출력층은 새 문제에 맞게 수정합니다.
    • 하위 은닉층: 기본적인 특징(선, 색상, 텍스처 등)을 인식하므로 대부분의 문제에서 재사용 가능합니다.
    • 상위 은닉층: 좀 더 문제 특화된 특징을 인식하므로, 문제 유사성에 따라 재사용 여부를 결정합니다.
  3. 재사용층 동결(Freezing): 가져온 층의 가중치가 훈련 중에 변하지 않도록 "동결"합니다. 이렇게 하면 기존 지식이 보존됩니다.
  4. 새 데이터로 훈련: 새 문제에 맞는 데이터로 변형된 모델을 훈련시킵니다.
  5. 미세 조정(Fine-tuning): 성능을 높이기 위해 동결된 일부 층을 해제하고 낮은 학습률로 추가 훈련할 수 있습니다.

 

파이썬으로 구현하는 전이 학습 예제

이제 TensorFlow/Keras를 사용한 전이 학습 실습을 해보겠습니다.

패션 MNIST 데이터셋을 특별한 방식으로 분할하여, 두 개의 관련된 작업을 만들어 전이 학습의 효과를 확인해보겠습니다.

1. 필요한 라이브러리 임포트

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

2. 데이터 준비

패션 MNIST 데이터셋을 로드하고 전처리합니다.

(X_train_full, y_train_full), (X_test, y_test) = keras.datasets.fashion_mnist.load_data()
X_train_full = X_train_full / 255.0  # 0-1 범위로 정규화
X_test = X_test / 255.0
X_valid, X_train = X_train_full[:5000], X_train_full[5000:]
y_valid, y_train = y_train_full[:5000], y_train_full[5000:]
 
 

이제 데이터셋을 두 가지 다른 작업으로 분할합니다:

  • 작업 A: 샌들(클래스 5)과 셔츠(클래스 6)를 제외한 8개 클래스 분류
  • 작업 B: "이것이 셔츠인가요?"라는 이진 분류 문제
def split_dataset(X, y):
    # 샌들이나 셔츠에 해당하는 인덱스 식별
    y_5_or_6 = (y == 5) | (y == 6)
    
    # 작업 A 데이터 생성 (샌들/셔츠 제외)
    y_A = y[~y_5_or_6]
    y_A[y_A > 6] -= 2  # 클래스 7,8,9를 5,6,7로 이동
    
    # 작업 B 데이터 생성 (이진 분류: 셔츠=1, 샌들=0)
    y_B = (y[y_5_or_6] == 6).astype(np.float32)
    
    return ((X[~y_5_or_6], y_A), (X[y_5_or_6], y_B))

# 데이터셋 분할 적용
(X_train_A, y_train_A), (X_train_B, y_train_B) = split_dataset(X_train, y_train)
(X_valid_A, y_valid_A), (X_valid_B, y_valid_B) = split_dataset(X_valid, y_valid)
(X_test_A, y_test_A), (X_test_B, y_test_B) = split_dataset(X_test, y_test)

# 작업 B의 학습 데이터를 의도적으로 적게 유지 (전이 학습 효과를 더 잘 보기 위해)
X_train_B = X_train_B[:10]
y_train_B = y_train_B[:10]
 

여기서 주목할 점은 작업 B의 훈련 데이터를 일부러 10개만 사용한다는 것입니다.

이는 데이터가 제한적일 때 전이 학습의 효과를 더 극적으로 보여주기 위함입니다.

3. 소스 모델(작업 A용) 훈련

먼저 샌들/셔츠를 제외한 8개 클래스를 분류하는 모델 A를 훈련합니다.

tf.random.set_seed(42)  # 재현성을 위한 시드 설정
np.random.seed(42)

model_A = keras.models.Sequential()
model_A.add(keras.layers.Flatten(input_shape=[28, 28]))
for n_hidden in (300, 100, 50, 50, 50):
    model_A.add(keras.layers.Dense(n_hidden, activation="relu"))
model_A.add(keras.layers.Dense(8, activation="softmax"))

model_A.compile(loss="sparse_categorical_crossentropy",
                optimizer=keras.optimizers.SGD(learning_rate=1e-2),
                metrics=["accuracy"])

history = model_A.fit(X_train_A, y_train_A, epochs=20,
                     validation_data=(X_valid_A, y_valid_A))
 

이 모델은 8개 클래스 분류 문제에 대해 훈련되며, 약 93%의 검증 정확도를 달성합니다.

4. 비교 모델(전이 학습 없이) 훈련

비교를 위해, 전이 학습 없이 처음부터 훈련하는 모델 B를 만들어 보겠습니다.

 

model_B = keras.models.Sequential()
model_B.add(keras.layers.Flatten(input_shape=[28, 28]))
for n_hidden in (300, 100, 50, 50, 50):
    model_B.add(keras.layers.Dense(n_hidden, activation="relu"))
model_B.add(keras.layers.Dense(1, activation="sigmoid"))

model_B.compile(loss="binary_crossentropy",
                optimizer=keras.optimizers.SGD(learning_rate=1e-2),
                metrics=["accuracy"])

history = model_B.fit(X_train_B, y_train_B, epochs=20,
                     validation_data=(X_valid_B, y_valid_B))

10개의 훈련 데이터만으로는 모델 B가 제대로 학습하지 못하고, 검증 정확도는 약 51% 정도에 그칩니다(거의 랜덤한 추측 수준).

5. 전이 학습 모델 구성

이제 모델 A의 지식을 활용하여 작업 B를 위한 전이 학습 모델을 구성합니다.

 

# 모델 A의 복사본 생성
model_A_clone = keras.models.clone_model(model_A)
model_A_clone.set_weights(model_A.get_weights())

# 모델 A의 층들을 가져와 모델 B 생성 (출력층 제외)
model_B_on_A = keras.models.Sequential(model_A_clone.layers[:-1])
model_B_on_A.add(keras.layers.Dense(1, activation="sigmoid"))

 

이 코드에서 주목할 점:

  1. 먼저 모델 A를 복제합니다(원본을 그대로 유지하기 위해).
  2. 복제된 모델에서 출력층을 제외한 모든 층을 가져옵니다.
  3. 이진 분류에 적합한 새로운 출력층(뉴런 1개, 시그모이드 활성화 함수)을 추가합니다.

6. 전이 학습 1단계: 사전 훈련된 층 동결

전이 학습의 첫 단계에서는 모델 A에서 가져온 층들을 '동결'(훈련 불가능하게 설정)하고, 새로운 출력층만 훈련합니다.

 

# 모델 A에서 가져온 모든 층 동결
for layer in model_B_on_A.layers[:-1]:
    layer.trainable = False

model_B_on_A.compile(loss="binary_crossentropy",
                    optimizer=keras.optimizers.SGD(learning_rate=1e-2),
                    metrics=["accuracy"])

# 출력층만 훈련
history = model_B_on_A.fit(X_train_B, y_train_B, epochs=4, 
                          validation_data=(X_valid_B, y_valid_B))

 

이렇게 하면 새로운 출력층이 기존 특징 추출기(모델 A에서 가져온 층들)에 적응할 시간을 갖게 됩니다.

7. 전이 학습 2단계: 미세 조정

두 번째 단계에서는 마지막 은닉층도 함께 훈련하여 모델을 미세 조정합니다.

 

# 마지막 은닉층의 동결 해제
model_B_on_A.layers[-2].trainable = True

model_B_on_A.compile(loss="binary_crossentropy",
                    optimizer=keras.optimizers.SGD(learning_rate=1e-2),
                    metrics=["accuracy"])

# 추가 훈련
history = model_B_on_A.fit(X_train_B, y_train_B, epochs=16,
                          validation_data=(X_valid_B, y_valid_B))

 

마지막 은닉층과 출력층을 함께 훈련함으로써 모델은 새로운 작업에 더 적합하게 조정됩니다.

 

 

결과 비교

최종 결과를 확인해 보면:

  • 전이 학습 없이 처음부터 훈련한 모델 B: 51% 정확도
  • 전이 학습을 적용한 모델: 98.7% 정확도

단 10개의 훈련 샘플로도 전이 학습 모델은 거의 완벽한 성능을 보여주었습니다. 이는 모델 A에서 학습한 일반적인 특징들이 모델 B의 작업에도 유용하게 적용되었다는 것을 의미합니다.

 

 

전이 학습 사용 시 주의사항

전이 학습이 항상 마법처럼 작동하는 것은 아닙니다. 실무에서 전이 학습을 적용할 때 고려해야 할 몇 가지 중요한 주의사항이 있습니다:

  1. 재현성 문제: 많은 논문에서 전이 학습의 긍정적인 결과만 보고하는 경우가 있습니다. 연구자들은 종종 "될 때까지 데이터 들들 볶기"라 불리는 방식으로 여러 시도를 해보고 가장 좋은 결과만 발표하기도 합니다.
  2. 초기 조건에 민감: 타겟 클래스(예: 셔츠)나 랜덤 초기값을 바꾸는 것만으로도 성능이 크게 떨어질 수 있습니다. 심지어 일부 경우에는 전이 학습을 적용했을 때 성능이 오히려 더 나빠지기도 합니다.
  3. 모든 아키텍처에 적합하지 않음: 전이 학습은 작은 완전 연결 네트워크에서는 잘 작동하지 않는 경향이 있습니다. 이는 작은 네트워크가 패턴을 적게 학습하고, 완전 연결 네트워크가 특정 작업에 너무 특화된(다른 작업에 유용하지 않은) 패턴을 학습하기 때문으로 추정됩니다.
  4. CNN에서 더 효과적: 전이 학습은 특히 하위 층에서 일반적인 특성을 감지하는 경향이 있는 심층 합성곱 신경망(CNN)에서 더 효과적으로 작동합니다.
  5. 비판적 평가 필요: 지나치게 긍정적인 논문 결과는 건강한 의심의 눈초리로 바라볼 필요가 있습니다. 연구자들은 종종 연구 과정에서 겪은 많은 실패를 언급하지 않는 경우가 많습니다.
  6. 시행착오 과정: 성공적인 전이 학습 구현은 보통 수많은 시행착오 끝에 이루어집니다. 이 방법이 잘 작동하는 데에는 특정 조건과 상황이 요구되며, 모든 상황에서 마법처럼 작동하지는 않습니다.

이러한 주의사항을 염두에 두고 전이 학습을 적용한다면, 기대치를 현실적으로 관리하고 보다 효과적으로 모델을 개발할 수 있을 것입니다. 새로운 기술이 현란하게 보이더라도 실제로 큰 도움이 되지 않는 경우도 있습니다.

728x90
반응형
728x90
반응형

Feed Forward Network (FFN)

Feed Forward Network(FFN)는 가장 기본적인 인공 신경망 구조입니다. 완전 연결 층(Fully Connected Network, FCN)이라고도 불리며, 각 층의 모든 뉴런이 다음 층의 모든 뉴런과 연결되어 있습니다.

작동 원리:

  • 입력층은 데이터를 받아들이는 첫 번째 층입니다.
  • 은닉층은 입력 데이터를 처리하며, 여러 개의 층으로 구성될 수 있습니다.
  • 출력층은 최종 결과를 내보내는 층입니다.

FFN의 주요 특징은 '고차원 공간에서의 클러스터링'입니다. 이것은 다양한 특성을 가진 데이터를 고차원 공간에서 분류하는 능력을 의미합니다. 예를 들어, 이미지 분류 문제에서 픽셀값들의 패턴을 인식하여 고양이 사진과 강아지 사진을 구분할 수 있습니다.

현실 세계의 활용 예로는 얼굴 인식, 음성 인식, 자연어 처리 등이 있습니다. 예를 들어, 스마트폰의 잠금 해제 기능에서 얼굴 인식은 FFN과 같은 신경망 구조를 활용합니다.

심층 신경망의 가능성 근거

인공 신경망이 왜 효과적인지 이해하려면 그 근본적인 영감의 원천인 인간의 뇌를 살펴볼 필요가 있습니다.

생물학적 뉴런과 인공 뉴런의 비교:

  • 생물학적 뉴런은 수상돌기(입력), 세포체(처리), 축삭돌기(출력), 시냅스(연결)로 구성됩니다.
  • 인공 뉴런은 이를 단순화하여 입력값(x), 가중치(w), 활성화 함수(f), 출력값(o)으로 모델링합니다.

퍼셉트론의 수학적 표현

퍼셉트론은 가장 기본적인 인공 신경망의 구성 요소입니다. 1957년에 프랭크 로젠블랫이 개발한 이 알고리즘은 현대 딥러닝의 기초가 되었습니다.

수학적 원리:

  1. 여러 입력값(i₁, i₂, ...)에 각각 가중치(w₁, w₂, ...)를 곱합니다.
  2. 이들의 합(Σ)에 편향(b)을 더합니다.
  3. 이 결과를 활성화 함수(f)에 통과시켜 최종 출력을 얻습니다.

퍼셉트론의 기본 방정식 i₁·w₁ + i₂·w₂ = 0은 2차원 평면에서 직선을 의미합니다. 이 직선은 데이터를 두 클래스로 분류하는 '결정 경계'가 됩니다. 이것이 바로 '선형 분류기'의 개념입니다.

실생활 예시로는 이메일 스팸 필터를 들 수 있습니다. 메일에 포함된 특정 단어들(입력)에 가중치를 부여하고, 그 합계가 특정 임계값을 넘으면 스팸으로 분류하는 방식으로 작동할 수 있습니다.

퍼셉트론의 한계는 XOR 문제와 같은 선형적으로 분리할 수 없는 문제를 해결할 수 없다는 점입니다. 이러한 한계를 극복하기 위해 다층 퍼셉트론(MLP)이 등장했습니다.

활성화 함수의 종류와 특징

활성화 함수는 신경망에 비선형성을 추가하는 중요한 요소입니다. 비선형성이 없다면, 아무리 많은 층을 쌓아도 단일 층과 수학적으로 동일한 기능만 수행할 수 있습니다.

주요 활성화 함수:

  1. 계단 함수 (Step Function)
    • 가장 단순한 형태의 활성화 함수입니다.
    • 입력이 0보다 크거나 같으면 1, 작으면 0을 출력합니다.
    • 단점: 미분이 불가능하여 경사 하강법을 적용할 수 없습니다.
    • 활용: 초기 퍼셉트론에서 사용되었으나 현대 딥러닝에서는 거의 사용되지 않습니다.
  2. 시그모이드 함수 (Sigmoid)
    • 모든 입력을 0과 1 사이의 값으로 매핑합니다.
    • 수식: σ(z) = 1/(1+e^(-z))
    • 장점: 출력이 확률처럼 해석될 수 있습니다.
    • 단점: 깊은 신경망에서 기울기 소실 문제를 일으킬 수 있습니다.
    • 활용: 이진 분류 문제의 출력층에서 주로 사용됩니다.
  3. ReLU (Rectified Linear Unit)
    • 입력이 0보다 크면 그대로 출력, 작으면 0을 출력합니다.
    • 수식: f(z) = max(0, z)
    • 장점: 계산이 단순하고 경사 소실 문제가 적습니다.
    • 단점: 일부 뉴런이 '죽는' 현상(Dying ReLU)이 발생할 수 있습니다.
    • 활용: 현대 CNN, RNN 등 대부분의 딥러닝 모델에서 사용됩니다.
  4. Softmax 함수
    • 다중 클래스 분류를 위한 활성화 함수입니다.
    • 각 클래스의 확률 값으로 해석할 수 있는 출력을 생성합니다.
    • 수식: softmax(z)_i = e^z_i / Σ e^z_j
    • 활용: 다중 분류 문제의 출력층에서 사용됩니다(예: MNIST 숫자 인식).

활성화 함수의 선택은 신경망의 성능에 큰 영향을 미칩니다. 최근에는 ReLU와 그 변형(LeakyReLU, PReLU 등)이 은닉층에서 널리 사용되고, 출력층에서는 문제의 특성에 따라 시그모이드나 소프트맥스가 주로 사용됩니다.

실습 환경 구축

신경망과 딥러닝을 공부하려면 적절한 개발 환경이 필요합니다. 이 강의에서는 다음과 같은 환경을 구축하게 됩니다:

  1. 주피터 노트북 설치
    • 데이터 분석과 시각화를 위한 대화형 환경
    • 설치 명령어: pip install jupyterlab 또는 pip install notebook
    • 실행 명령어: jupyter lab 또는 jupyter notebook
  2. 텐서플로우 설치
    • 구글에서 개발한 딥러닝 프레임워크
    • 설치 명령어: pip install tensorflow
    • 버전 확인: import tensorflow as tf; print(tf.__version__)
  3. 구글 Colab 활용
    • 별도의 설치 없이 웹 브라우저에서 Python과 TensorFlow를 실행할 수 있는 환경
    • GPU/TPU를 무료로 사용할 수 있어 딥러닝 학습에 유리
    • 구글 계정만 있으면 바로 시작 가능: colab.research.google.com

실습 환경이 준비되면, MNIST 데이터셋을 이용한 숫자 인식, Fashion MNIST를 이용한 의류 이미지 분류, 자연어 처리를 위한 LSTM 모델 구현 등 다양한 실습을 진행하게 됩니다.

 

728x90
반응형
728x90
반응형

 

전체 데이터셋 : 1000개 데이터

batch size : 100

각 epoke 당 batch 수 : 10

 

네트워크 구성

ReLU -> ReLU -> softMax

 

세 개의 activation 함수를 통과 한다고 할때 10epoke는 무슨일이 일어나냐?

  1. 첫 번째 배치가 전체 네트워크(ReLU → ReLU → Softmax)를 통과합니다.
  2. 첫 번째 배치에 대한 손실을 계산하고 가중치를 업데이트합니다.
  3. 두 번째 배치가 전체 네트워크를 통과합니다.
  4. 두 번째 배치에 대한 손실을 계산하고 가중치를 업데이트합니다.
  5. ...
  6. 열 번째 배치가 전체 네트워크를 통과합니다.
  7. 열 번째 배치에 대한 손실을 계산하고 가중치를 업데이트합니다.

이렇게 10개의 배치가 모두 처리되면 1 에포크가 완료됩니다. 그 다음 2 에포크가 시작되어 같은 과정이 반복됩니다.

각 배치마다 네트워크의 모든 층(ReLU → ReLU → Softmax)을 통과하고, 모든 배치가 처리되어야 1 에포크가 완료된다고 보시면 됩니다.

 

 

 

그렇다면 Batch Norm은 무엇일까요?

 

배치 정규화(Batch Normalization, 줄여서 Batch Norm)는 딥러닝 모델 훈련 시 성능을 향상시키는 기법입니다. 2015년에 Sergey Ioffe와 Christian Szegedy가 제안한 이 방법은 현재 대부분의 딥러닝 모델에서 널리 사용되고 있습니다.

배치 정규화의 주요 기능과 장점은 다음과 같습니다:

  1. 정규화 과정: 각 배치의 데이터를 평균이 0, 분산이 1이 되도록 정규화합니다. 즉, 각 층의 입력 분포를 일정하게 유지합니다.
  2. 내부 공변량 이동(Internal Covariate Shift) 감소: 훈련 과정에서 각 층의 입력 분포가 계속 변하는 문제를 해결합니다.
  3. 학습 속도 향상: 더 높은 학습률을 사용할 수 있게 하여 훈련 속도를 크게 향상시킵니다.
  4. 정규화 효과: 가중치 정규화와 유사한 효과를 제공하여 과적합을 줄입니다.
  5. 그래디언트 소실/폭발 문제 완화: 깊은 네트워크에서 발생하는 그래디언트 소실이나 폭발 문제를 줄여줍니다.
 
그렇다면 왜 우리는 Batch Norm으로 위의 그림과 같이 다른 Batch를 비슷하게 정규화 하는 것일까요?
  1. 학습 과정의 불안정성 문제: 딥러닝 모델을 훈련할 때, 앞쪽 층의 가중치가 조금만 변해도 뒤쪽 층에 전달되는 데이터 분포가 크게 변할 수 있습니다. 이렇게 되면 뒤쪽 층들은 지속적으로 변화하는 입력 분포에 적응해야 하므로 학습이 느려지고 불안정해집니다.
  2. 그래디언트 소실과 폭발 문제: 깊은 신경망에서는 역전파 과정에서 그래디언트가 점점 작아지거나(소실) 너무 커지는(폭발) 문제가 발생합니다. 배치 정규화는 활성화 값들을 적절한 범위로 유지시켜 이 문제를 완화합니다.
  3. 학습률 민감성 감소: 배치 정규화가 없으면 적절한 학습률을 찾기가 매우 어렵습니다. 너무 크면 발산하고, 너무 작으면 학습이 너무 느립니다. 배치 정규화는 더 넓은 범위의 학습률에서 안정적으로 학습할 수 있게 해줍니다.
  4. 초기 가중치에 대한 의존성 감소: 배치 정규화 없이는 가중치 초기화 방법이 매우 중요합니다. 배치 정규화를 사용하면 초기화 방법에 대한 민감도가 줄어듭니다.
  5. 정규화 효과로 인한 일반화 성능 향상: 배치 정규화는 약한 형태의 정규화 역할을 하여 모델이 훈련 데이터에 과적합되는 것을 방지하고 테스트 데이터에 대한 성능을 향상시킵니다.

 

그렇다면 그래디언트 소실과 폭발은 무엇인가요?

 

그래디언트 소실(Vanishing Gradient)

  1. 수학적 원인: 활성화 함수(특히 시그모이드나 하이퍼볼릭 탄젠트)의 미분값이 특정 구간에서 매우 작습니다(0에 가까움).
  2. 전파 과정: 역전파 시 이 작은 미분값들이 곱해지며 점점 더 작아집니다.
  3. 결과: 앞쪽 층으로 갈수록 그래디언트가 거의 0에 가까워져, 가중치가 거의 업데이트되지 않습니다.
  4. 실질적 의미: 깊은 네트워크의 앞쪽 층들은 학습이 매우 느리거나 거의 이루어지지 않게 됩니다.

그래디언트 폭발(Exploding Gradient)

  1. 수학적 원인: 가중치 초기화가 부적절하거나, 네트워크 구조에 문제가 있을 때 발생합니다.
  2. 전파 과정: 역전파 시 그래디언트 값이 점점 커지게 됩니다.
  3. 결과: 그래디언트 값이 너무 커져 가중치 업데이트가 불안정해집니다.
  4. 실질적 의미: 학습이 발산하고 모델이 수렴하지 않게 됩니다.

과적합(Overfitting)

  1. 통계적 원인: 모델이 훈련 데이터의 노이즈나 특이점까지 학습하게 됩니다.
  2. 복잡성 측면: 모델의 용량(파라미터 수)이 필요 이상으로 클 때 발생합니다.
  3. 데이터 관점: 훈련 데이터가 적거나 편향되어 있을 때 더 심해집니다.
  4. 결과: 훈련 데이터에서는 성능이 매우 좋지만, 테스트 데이터에서는 성능이 떨어집니다.
  5. 실질적 의미: 모델이 일반화 능력을 잃고 특정 훈련 데이터에만 최적화되어 새로운 데이터에 대응하지 못하게 됩니다.
728x90
반응형
728x90
반응형

<이룬거>

1. 조교 인수인계

인수인계는 다 받았고 내일부터 출근 예정이다..ㅎ

 

2. 계절학기

부담이 안되도록 6학점을 들은 건데 결국 이번학기 18학점이다.

듣고 싶은 과목이 너무 많다

 

3. 렙실 석사 컨택

학부연구생부터 시작해서 잘 되면 석사까지 하게 될 것 같다.

그래서 18학점까지 듣는 이유도 들으면 좋은 과목들이 보여서 수강신청하게 되었다.

 

<못 이룬거>

1. 정보통신기사, 무선통신기사

둘다 따려고 했지만, 렙실 인턴을 시작하기도 했고 겨울방학때 학과일도 있었다..

(사실 핑계고 열심히 안살았음..)

 

2. 자소서 작성 및 인적성 공부

이것도 안했다.

걍 망해버

 

3. 오픽 취득

학교 다니면서 따야할듯하다..

인강은 조금씩 듣는중

 

4. 캡스톤 끝내기

어느정도 중간중간 하고 있긴하다

아직 끝내진 못함..

 

 

열심히 살자...

 

728x90
반응형
728x90
반응형

 

 

한참 공부가 안될때는 이렇게 블로그에 무언갈 쓰면서 마음을 다잡는 것 같다.

2024년 겨울은 이제 취업시장에 첫발을 들이는 시기이다.

그만큼 엄청 중요하고 열심히 살아야한다.

 

1. 정보통신기사, 무선통신기사

4학년이 되니 이제 기사 자격증 시험을 치룰수 있는 자격이 생긴다.

나는 방학때 통신 기사중 정보통신기사, 무선통신기사 이렇게 두 개를 동시에 준비하려고 한다.

내용도 겹치고 학부때 들었던 과목들로 이루어져 있어서 동시에 준비할 수 있을 것 같다는 생각이 들었다.

 

2. 리눅스 마스터 1급

무리 일수도 있지만, 리눅스마스터 1급 필기도 공부해서 합격해보려고 한다.

이번 9월에 먼저 필기를 친 친구의 말에 따르면 기출과 꽤나 달라졌고 지엽적인 문제를 조금 낸다고 들었다.

친구는 아쉽게 1문제 차이로 떨어졌다...

 

3. 조교 인수인계

교내근로에서 내년도 조교를 맡게 되어 인수인계를 받아야한다.

이상한 일 없이 잘 인수인계를 받는것도 목표중 하나이다.

 

4. 자소서 작성 및 인적성 공부

선배들 말로는 겨울방학 때 미리 자소서를 작성해놔야 취업준비와 학업을 병행할 때 어렵지 않게 할 수 있다고 하였다.

그래서 자소서를 작성하고 인적성 공부까지 해보려고 한다.

 

5. 오픽 취득

이건 종강하자마자 학원을 등록하려고 한다.

돈이 아깝긴해도 빠르고 확실하게 따야한다고 생각이 들었다.

 

6. 계절학기

이번 여름에 인턴을 갔다오면서 계절학기를 수강하지 못했다.

다음학기에 부담이 안가도록 6학점을 들을 생각이다.

 

7. 캡스톤 끝내기

4-1때 진행하는 캡스톤을 겨울방학때 미리 끝내려고 한다.

그리고 4-1때는 새로운 주제로 프로젝트를 하나 더 해보려고 준비중이다.

 

8. 코테준비

이건 진짜 계획에 없던건데, 하드웨어와 소프트웨어 둘다 다룰 수 있는 사람이 되고 싶어서 추가하게 되었다.

하루에 2문제 정도 풀어볼까 생각중이다.

 

 

 

막상 다 적어보니 이걸 다 할 수 있을까? 라는 생각이 든다..

그래도 최선을 다해보려고 한다.

 

내가 3년전부터 빠진 취미가 있는데, 바로 블랙컴뱃을 보는거다.

블랙컴뱃은 격투기 단체이고 3년전에 새로 생긴 단체이다.

이 단체가 생겼을 때부터 지금까지 보면서 느낀 점들이 정말 많다.

 

단체를 운영함에 따른 어려움, 그리고 격투기 선수들에 대한 대우 여러가지를 보고 느꼈다.

그 중에서 제일 인상 깊은 점은 단체 대표인 검정의 마인드이다.

이 사람은 대회가 끝나고 항상 짧게 연설을 한다.

내가 힘들 때 보는 2가지 중에 하나가 이 연설이다.

 

 

"사람만큼 약한 존재가 없다고 생각하는데. 사람만큼 강한 존재도 없습니다.
이정도까지 강해질 수 있었던건 힘들때마다 왜 싸워야 하는가를 고민했던 것 같습니다.
격투기랑 우리 인생이랑 비슷한게 많은데, 인생도 똑같은 것 같습니다. 살아갈때 왜 살아가는지 무엇을 위해 살아가는지가 분명하다면 그리고 그 목적이 옳다면 사람만큼 강한 존재는 없을 거라고 생각합니다."

 

 

이걸 듣고 꽤나 인상깊었고 이 단체 그리고 이 사람에 대해 정말 궁금해졌다.

그렇게 내 유일한 취미가 되었다.

 

 

728x90
반응형
728x90
반응형

 

#IST 인턴 후기 및 관련 정보는 제 블로그에 정리해두었습니다 !

#컴펙트하게 적었습니다.

 

1. 학점 및 학교

인서울 중하위권 공대, 당시 3학년 재학중

당시 학점은 아래와 같습니다.

 

전체 : 3.83

전공 : 4.16

 

ist 인턴 오신분들 보면 전반적으로 학벌이 엄청 좋다는 느낌은 들지 않았습니다.

다만 학점이 전체적으로 높으셨던 것 같습니다.

 

 

2. 스펙

당시에 스펙은 학생회 간부 정도밖에 없어서 그냥 학부에서 배운 수준의 matlab, python 정도 다룰줄 안다고 적었습니다.

 

 

3. 합격팁

무조건 "컨택 메일" 보내셔야 합니다.

자소서 성의 있게 쓰고 예의 있게 정성을 담아서 컨택 메일 드리면 교수님이 답장을 주실겁니다.

컨택 메일 쓰는 법과 관련 내용 팁은 아래 링크에 적혀있습니다.

 

https://itpro-1.tistory.com/5

 

[후기] 2024년도 Dgist 대학원 하계인턴 후기, 정보, 꿀팁

결론부터 말하자면, 정말 좋은 경험이었다. 5주란 시간이 짧지 않은 시간인데, 엄청 빨리 지나간 것 같다. 디지스트 하계인턴을 알게된 계기는 학과 선배의 추천이었다. 학과 선배가 동계인턴

itpro-1.tistory.com

 

 

짧은 5주동안 꽤 많은 걸 배웠고 동기부여도 됐던 하계인턴 추천드립니다.

728x90
반응형
728x90
반응형

 

1. 배경

처음부터 KT 온라인 학습 멘토링을 하려고 한 것은 아니었다.

이번년도 초 3학년이 됐으니 무언가를 해보자는 생각에 학교 공지를 찾던 중 삼성드림클래스라는 멘토링을 발견하게 된다.

 

나는 고등학교 시절 대학원생 분들께 프로그래밍 관련 멘토링을 받았었고, 나도 언젠가 대학생이 되어 학생들에게 다시 보답하고 싶다는 생각을 마음 한켠에 가지고 있었다.

그렇게 멘토링을 한번 해보자! 라는 생각으로 삼성드림클래스와 H-점프스쿨이라는 멘토링 프로그램에 지원하게 된다.

 

하지만 아쉽게도 삼성드림클래스는 서류 합격하였지만, 면접에서 떨어졌고, H-점프스쿨은 서류에서 탈락하였다.

삼성드림클래스 서류와 면접 관련 내용은 나중에 따로 다루려고 한다.

 

다음으로는 청소년문화센터에서 주관하는 멘토링이 있었는데, 해당 멘토링도 면접에 떨어졌다.

이쯤되니, 오기가 생겨 이번년에 무조건 멘토링을 한다. 라는 마인드로 KT 온라인 학습 멘토링에 지원하게 되었다.

 

 

2. 서류 합격

서류 질문은 아래와 같다.

 

1. KT그룹 희망나눔재단 온라인 학습 멘토단에 지원한 동기는 무엇인가요?

2. 청소년 대상 봉사/대외 활동 경험이 있다면 당시 경험했던 일들과 느낀 점을 적어주세요.

3. 반복되는 멘티의 결석에 자신만의 대처 방법을 알려주세요.

4. 자신을 표현할 수 있는 '경험'을 소개해주세요.

 

서류는 이미 3번을 써봤기 때문에 어렵지 않게 적어냈다.

책임감과 성실함을 강조하여 내용을 작성했다.

참고로 서류를 작성하면 지원내용을 다시 확인하지 못하니 꼭 메모장에 따로 옮겨놓자 !

 

3. 면접 합격

면접은 최악이었다.

여태 면접들은 전부 대면이라 나름 긴장을 하는 시간들이 있었는데, KT 멘토링은 온라인이라 생각보다 긴장이 안되었다.

그러다 보니 너무 방심했고 내가 준비한 것들을 전부 보여주지 못했다.

 

여태 봐왔던 면접 중에서 최악으로 봤던 것 같다.

그래서 당연히 떨어질 것이라 생각했지만, 그때 중간고사 기간인지라 생각보다 지원자가 많지 않아 내가 붙을 수 있었던 것 같다.

운이 좋았다.

 

면접 준비는 기본적인 것과 자소서에서 몇개 추렸다.

 

<자기소개 및 지원동기>

<멘토링을 받아본 경험과 해본 경험>

<멘토링 경험을 통해서 본인은 어떤 멘토가 되어야겠다고 생각했는지>

<고등학교 때 멘토링을 했다고 했는데, 순조로웠는지?>

<본인은 좋은 멘토였다고 생각했는지?>

<열정적으로 활동에 참여할 것 같은지?>

<만약 학생 중 한 명이 수업에 집중하지 못하는 모습을 보인다면?>

<진로계획이 어떻게 되는지?>

<마지막으로 하고 싶은 말?>

 

이정도 준비했던 것 같다.

 

 

4. 활동 후기

- 좋았던 점

 

1. 시간이랑 공간에서 오프라인보다 상대적으로 자유로웠다.

"온라인" 이건 정말 좋았다.

 

 

2. 동기부여를 받을 수 있었다.

내 멘티는 중학생 3학년인데, 전교 1등을 하는 친구였다.

그만큼 정말 열심히 하려는 멘티를 만났다.

학생때 선생님들이 왜 열심히 하는 애들한테 하나 더 알려주고 더 친절하게 대했는지 이제 알 것 같다

 

처음 멘토링을 할 때, 멘토링 별거 있겠어? 그냥 문제 몇문제 풀어주면 되지 뭐.

이런 좋지 않은 마인드로 멘토링을 시작했었다.

근데 정말 열심히 나한테 하나라도 더 배우려는 학생이 막상 눈앞에 있으니, 내 생각을 반성하게 되었다.

 

그리고 중학생인데 벌써 저렇게 열심히 하는구나 하는 생각과 내 예전의 삶을 반성하게 되는 계기도 되었다.

그때 이후로는 수업도 많이 준비해갔고 원래는 중3 내용까지만 가르쳐야 하지만, 고등학교 1학년 수학 내용까지 알려주었다.

물론 학생이 그만큼 따라주고 욕심도 있는 친구이기에 가능했던 것이다.

 

멘티가 두명이었는데, 다른 친구는 이 친구와는 반대였다.

정말 정반대였는데, 결국 멘토링을 그만두겠다고 하였다.

 

정말 느끼는게 많은 멘토링이었던 것 같다.

 

 

3. 커피값을 벌 수 있었다.

멘토링을 하게 되면 시급을 받게 되는데 1시간에 18,000원이다.

주에 2시간이니 한달하면 커피값은 벌 수 있었다.

 

 

- 단점

 

1. 서버가 자주 터졌다.

해당 멘토링을 진행하려면 크루디라는 웹에서 화상통화를 진행해야 했다.

근데 이 크루디라는 웹이 내가 멘토링을 6개월 정도 했는데 2,3번 정도 터졌던 것 같다.

이러면 줌이나 웨일같이 타영상통화 서비스를 써야한다.

 

타서비스를 쓰는건 문제가 되지 않는다.

문제는 타서비스에서 녹화를 해서 증거로 올려야하는게 너무 귀찮았다.

심지어 줌은 최대 40분까지만 지원을 하기에 1시간 단위로 시간을 인정해주는 시스템 때문에

여간 귀찮은게 아니었다. 결국 웨일에서 노트북자체 녹화로 녹화하였다.

 

 

2. 유도리가 없다.

내가 맡은 학생은 정말 잘하고 열심히하려는 학생이었다.

그러다보니 중학교 3학년 진도는 금방 뺄 수 있었다.

해당 학생은 부모님도 욕심이 많으신지라 고등학교 수학도 알려달라고 요청하셨고 학생도 동의하였다.

 

그렇게 고등학교 1학년 수학을 알려주려고 했는데, 해당 기관에서 하지 말라는 응답을 받게 되었다.

학생 수준에 맡는 강의를 해야 학생도 도움이 되고 나도 보람이 있는 일인데, 그걸 굳이 막는게 조금 이해가 되지 않았다.

그래서 몰래 그냥 알려줬다...

 

 

5. 결론

열심히하고 잘 맡는 멘티가 걸리면 정말 의미있는 멘토링이 되겠지만, 열심히 하지 않는 멘티가 걸리면 동기가 떨어지고 의미없는 멘토링을 하게 될 것이다.

물론 이제 중학교 3학년인데, 열심히 하는 친구가 얼마나 있겠냐마는 그래도 내가 느낀바는 그렇다.

 

그래서 추천하는 멘토링이냐?

나는 추천한다.

어쨌거나 멘토링도 경험이고 스펙이다.

그리고 커피값도 주고...ㅎ

 

한번쯤 해볼만한 것 같다. 그리고 온라인이라는 것이 꽤나 메리트 있었다.

 

궁금한 점 있으면 댓글달면 되겠다.

728x90
반응형

+ Recent posts