챕터 27 선수지식: 딥러닝 기반 세포 유형 분류에 들어가기 전 알아야 할 것
1. 27챕터는 무엇을 하려는 장인가요?
27챕터는 scRNA-seq 데이터를 이용해 세포 유형을 자동 분류하는 딥러닝 모델을 만드는 실습입니다. 원문에서는 PyTorch Lightning을 사용합니다.
25장에서는 세포 발현 데이터를 분석해 클러스터를 만들고 마커 유전자를 찾았습니다. 그 과정은 비교적 탐색적입니다. 즉 “이 데이터 안에 어떤 세포 무리가 있을까요?”를 묻습니다.
27장은 조금 다릅니다. 이미 세포 유형 라벨이 있는 데이터를 가지고 모델을 훈련합니다. 그리고 새로운 세포가 들어왔을 때 “이 세포는 어떤 유형인가요?”를 예측하게 합니다.
이것은 지도학습입니다. 지도학습은 입력과 정답을 함께 주고 모델을 훈련시키는 방식입니다. 여기서 입력은 세포의 발현 패턴 또는 PCA 좌표이고, 정답은 cell_type입니다.
한 문장으로 정리하면 다음과 같습니다.
27장은 세포별 발현 데이터를 입력으로 넣으면 세포 유형을 예측하는 분류기를 훈련하는 장입니다.
2. PyTorch와 PyTorch Lightning은 무엇이 다른가요?
PyTorch는 딥러닝 모델을 만들고 학습시키는 기본 프레임워크입니다. 신경망 레이어를 정의하고, 데이터를 텐서로 바꾸고, 손실을 계산하고, 역전파로 가중치를 업데이트할 수 있게 해줍니다.
PyTorch Lightning은 PyTorch 코드를 더 정리된 구조로 작성하게 도와주는 라이브러리입니다. PyTorch 자체로도 모든 것을 할 수 있지만, 훈련 루프, 검증 루프, 로그 기록, GPU 설정, 체크포인트 저장 같은 반복 코드가 길어질 수 있습니다. PyTorch Lightning은 이런 반복 구조를 정리해줍니다.
비유하면 PyTorch는 엔진과 부품을 직접 조립할 수 있는 공구 세트이고, PyTorch Lightning은 그 공구 세트를 더 질서 있게 쓰도록 해주는 작업대와 설명서에 가깝습니다.
원문에서 LightningModule을 상속받아 모델을 정의하는 이유도 여기에 있습니다. 모델 구조, forward 계산, training step, validation step, optimizer 설정을 정해진 위치에 넣으면 Trainer가 전체 훈련 과정을 관리합니다.
3. Tensor는 무엇인가요?
딥러닝에서 tensor는 숫자 배열입니다. 1차원 배열도 tensor이고, 2차원 표도 tensor이고, 3차원 이상의 숫자 덩어리도 tensor입니다.
27장에서 세포 데이터는 PyTorch tensor로 바뀝니다.
X = torch.from_numpy(X).float()
y = torch.from_numpy(y).long()
여기서 X는 입력 데이터입니다. 원문에서는 adata.obsm["X_pca"]를 사용합니다. 즉 각 세포를 PCA 50개 숫자로 표현한 값입니다. 그래서 X의 모양은 보통 “세포 수 × 50”입니다.
y는 정답 라벨입니다. 세포 유형 이름을 숫자로 바꾼 값입니다. 예를 들어 T cell, B cell, macrophage 같은 문자열을 0, 1, 2 같은 정수로 바꿉니다. 이 작업에는 LabelEncoder가 사용됩니다.
딥러닝 모델은 문자열을 직접 정답으로 다루기 어렵습니다. 그래서 세포 유형 이름을 숫자로 바꿔야 합니다. 이것은 사람 이름표를 컴퓨터가 읽을 수 있는 번호표로 바꾸는 일과 비슷합니다.
4. 왜 원본 유전자 전체가 아니라 PCA 50차원을 입력으로 쓰나요?
원문에서는 모델 입력으로 adata.obsm["X_pca"]를 사용합니다. 이것은 유전자 전체 발현값이 아니라 PCA로 줄인 50차원 좌표입니다.
왜 굳이 줄인 값을 쓸까요?
첫째, 계산이 가벼워집니다. 유전자 2,000개 또는 20,000개를 그대로 입력하면 모델의 파라미터가 많아지고 학습이 무거워질 수 있습니다.
둘째, 잡음을 줄일 수 있습니다. 단일세포 데이터에는 dropout과 측정 잡음이 많습니다. PCA는 큰 변화 축을 중심으로 데이터를 요약하므로, 일부 잡음을 줄이는 효과가 있습니다.
셋째, 작은 실습 데이터에서는 과적합을 줄이는 데 도움이 됩니다. 입력 차원이 너무 크고 샘플 수가 적으면 모델이 진짜 패턴보다 훈련 데이터의 우연한 특징을 외워버릴 수 있습니다.
물론 실제 연구에서는 원본 발현값, HVG만 선택한 발현값, PCA 좌표, 딥러닝 임베딩 등 다양한 입력을 사용할 수 있습니다. 27장에서는 실습의 단순성과 안정성을 위해 PCA 50차원을 입력으로 사용한다고 보면 됩니다.
5. 신경망 레이어는 각각 무슨 역할을 하나요?
원문 모델은 Fully Connected, 즉 Linear 레이어를 중심으로 구성됩니다. 세포 하나가 PCA 50개 숫자로 들어오면, 신경망은 이 숫자들을 여러 번 조합해 세포 유형별 점수를 만듭니다.
Linear 레이어는 입력 숫자들을 가중합으로 섞습니다. 예를 들어 PCA1, PCA2, PCA3을 각각 다른 비중으로 더해 새로운 특징을 만듭니다. 이것은 모델이 “어떤 입력 특징 조합이 어떤 세포 유형과 관련 있는가”를 배우는 부분입니다.
ReLU는 활성화 함수입니다. 음수 값은 0으로 만들고, 양수 값은 그대로 둡니다. 이런 비선형 함수가 있어야 모델이 단순 직선 관계보다 복잡한 패턴을 배울 수 있습니다.
BatchNorm은 배치 단위로 값의 분포를 안정화합니다. 학습 중 중간 값들이 너무 흔들리지 않게 도와줍니다.
Dropout은 학습 중 일부 뉴런을 랜덤하게 꺼서 모델이 특정 연결에만 지나치게 의존하지 않게 합니다. 이것은 과적합을 줄이는 데 도움이 됩니다.
마지막 Linear 레이어는 세포 유형 수만큼의 출력값을 만듭니다. 예를 들어 세포 유형이 6개라면 출력도 6개입니다. 이 출력값 중 가장 큰 값에 해당하는 세포 유형을 모델의 예측으로 볼 수 있습니다.
6. CrossEntropyLoss는 왜 쓰나요?
세포 유형 분류는 다중 클래스 분류 문제입니다. 하나의 세포가 여러 세포 유형 중 하나에 속한다고 예측해야 합니다. 이런 문제에서는 CrossEntropyLoss를 자주 사용합니다.
CrossEntropyLoss는 모델이 정답 클래스에 높은 점수를 주도록 학습시키는 손실 함수입니다. 모델이 정답을 자신 있게 맞히면 loss가 낮아집니다. 모델이 정답이 아닌 클래스에 높은 점수를 주면 loss가 높아집니다.
예를 들어 어떤 세포의 정답이 B cell이라고 합시다. 모델이 B cell에 90% 확률을 주면 좋은 예측입니다. 반대로 T cell에 80%, B cell에 10%를 주면 나쁜 예측입니다. CrossEntropyLoss는 이런 차이를 숫자로 계산합니다.
초보자는 loss를 “모델이 얼마나 크게 혼났는지”라고 이해해도 됩니다. 정답에서 멀수록 많이 혼나고, 정답에 가까울수록 덜 혼납니다.
7. Accuracy와 Loss는 어떻게 다른가요?
Accuracy는 맞힌 비율입니다. 예를 들어 테스트 세포 100개 중 85개를 맞히면 accuracy는 85%입니다.
Loss는 예측의 질을 더 세밀하게 보는 숫자입니다. 모델이 정답을 맞혔더라도 확신이 낮으면 loss가 높을 수 있습니다. 반대로 틀렸더라도 정답과 비슷한 확률을 줬다면 loss가 상대적으로 덜 나쁠 수 있습니다.
예를 들어 둘 다 정답을 맞힌 경우라도 차이가 있습니다.
- 모델 A: 정답 클래스 확률 51%
- 모델 B: 정답 클래스 확률 99%
둘 다 accuracy 관점에서는 맞힌 것입니다. 하지만 loss 관점에서는 모델 B가 훨씬 좋습니다. 왜냐하면 정답에 더 확신을 가졌기 때문입니다.
TensorBoard에서는 train_loss, train_acc, val_loss, val_acc 같은 지표를 시간에 따라 볼 수 있습니다. train 성능은 좋아지는데 validation 성능이 나빠지면 과적합을 의심할 수 있습니다.
8. 훈련 데이터와 테스트 데이터는 왜 나누나요?
원문에서는 전체 세포 중 80%를 훈련 데이터로, 20%를 테스트 데이터로 나눕니다.
훈련 데이터는 모델이 공부하는 문제집입니다. 테스트 데이터는 모델이 나중에 보는 시험지입니다. 같은 문제집으로 공부하고 같은 문제집으로 시험을 보면 성적이 좋아 보여도 실제 실력을 알 수 없습니다.
딥러닝 모델은 데이터의 패턴을 배우지만, 너무 오래 또는 너무 복잡하게 학습하면 훈련 데이터의 우연한 특징까지 외워버릴 수 있습니다. 이것을 과적합이라고 합니다.
테스트 데이터를 따로 떼어 두면 모델이 처음 보는 세포에도 잘 작동하는지 확인할 수 있습니다. 생명정보학에서 중요한 것은 훈련 데이터 성능이 아니라, 새로운 데이터에 대한 일반화 성능입니다.
원문에서는 mask = np.random.rand(adata.n_obs) < 0.8로 훈련용 세포를 무작위로 고릅니다. 그 반대가 테스트 세포입니다.
9. DataLoader와 batch는 무엇인가요?
DataLoader는 데이터를 작은 묶음으로 나누어 모델에 공급하는 도구입니다. 이 작은 묶음을 batch라고 합니다.
원문에서는 batch size를 128로 설정합니다. 이것은 한 번에 세포 128개씩 모델에 넣는다는 뜻입니다.
왜 전체 데이터를 한 번에 넣지 않을까요? 데이터가 크면 메모리에 부담이 됩니다. 또 작은 batch 단위로 여러 번 업데이트하는 방식이 딥러닝 학습에서 일반적입니다. 모델은 batch 하나를 보고 loss를 계산하고, 그 loss를 줄이는 방향으로 가중치를 조금 수정합니다. 이 과정을 반복하면서 학습합니다.
DataLoader에서 shuffle=True는 훈련 데이터를 매번 섞어서 공급한다는 뜻입니다. 이렇게 하면 모델이 데이터 순서에 불필요하게 영향을 받는 것을 줄일 수 있습니다.
초보자는 DataLoader를 “문제집을 128문제씩 잘라서 모델에게 나눠주는 사람”이라고 생각하면 됩니다.
10. training_step, validation_step, configure_optimizers는 무엇인가요?
PyTorch Lightning 모델에서는 몇 가지 메서드를 정해진 방식으로 작성합니다.
forward는 입력이 들어왔을 때 예측값을 만드는 함수입니다. x가 들어오면 self.network(x)를 통해 출력값을 만듭니다.
training_step은 훈련 batch 하나에 대해 무엇을 할지 정의합니다. 입력과 정답을 받아 예측을 만들고, loss를 계산하고, accuracy를 계산해 로그로 남깁니다.
validation_step은 검증 또는 테스트 batch 하나에 대해 무엇을 할지 정의합니다. 훈련과 비슷하지만, 모델 가중치를 업데이트하지 않고 성능을 확인하는 용도입니다.
configure_optimizers는 어떤 optimizer를 쓸지 정합니다. 원문에서는 Adam optimizer를 사용합니다. optimizer는 loss를 줄이기 위해 모델의 가중치를 어떻게 바꿀지 결정하는 알고리즘입니다.
이 구조를 학교 수업으로 비유하면 다음과 같습니다.
| 메서드 | 쉬운 비유 | 역할 |
|---|---|---|
forward |
문제를 풀기 | 입력에서 예측을 만듭니다. |
training_step |
풀이 후 채점하고 공부하기 | loss를 계산하고 학습합니다. |
validation_step |
모의고사 보기 | 성능을 확인합니다. |
configure_optimizers |
공부 방법 정하기 | 가중치 수정 방법을 정합니다. |
11. TensorBoard는 왜 쓰나요?
TensorBoard는 딥러닝 학습 과정을 시각적으로 확인하는 도구입니다. 원문에서는 다음처럼 실행합니다.
%load_ext tensorboard
%tensorboard --logdir logs --bind_all
TensorBoard에서는 train_loss, train_acc, val_loss, val_acc 같은 지표가 epoch이 진행되면서 어떻게 변하는지 볼 수 있습니다.
학습이 잘 되고 있다면 train_loss와 val_loss가 어느 정도 내려가고, train_acc와 val_acc가 올라가는 경향을 보일 수 있습니다. 하지만 train_acc만 계속 올라가고 val_acc가 정체되거나 떨어진다면 과적합을 의심할 수 있습니다.
TensorBoard를 보는 이유는 단순히 결과 숫자 하나만 보기 위해서가 아닙니다. 학습 과정이 안정적인지, 너무 빨리 과적합되는지, validation loss가 이상하게 튀는지, epoch 수를 더 늘릴 필요가 있는지 판단하기 위해서입니다.
초보자는 TensorBoard를 “모델 공부 과정 성적표를 시간 순서대로 보여주는 대시보드”라고 이해하면 됩니다.
12. 체크포인트는 무엇인가요?
체크포인트는 훈련된 모델의 상태를 저장한 파일입니다. 원문에서는 다음처럼 저장합니다.
trainer.save_checkpoint("best_model.ckpt")
딥러닝 모델은 훈련이 끝나면 가중치라는 숫자들을 갖게 됩니다. 이 가중치들이 모델이 배운 내용입니다. 체크포인트는 이 가중치와 모델 설정 등을 파일로 저장해 나중에 다시 불러올 수 있게 합니다.
체크포인트를 저장하지 않으면 노트북을 끄거나 세션이 종료되었을 때 모델을 다시 처음부터 훈련해야 할 수 있습니다. 저장해두면 다음에 바로 불러와서 예측하거나 추가 훈련할 수 있습니다.
체크포인트는 게임의 세이브 파일과 비슷합니다. 열심히 진행한 상태를 저장해 두는 것입니다.
13. 추론과 결과 시각화는 무엇인가요?
훈련이 끝난 모델을 이용해 새 데이터의 정답을 예측하는 과정을 추론이라고 합니다. 원문에서는 테스트 데이터 X_test를 모델에 넣어 예측값을 얻습니다.
with torch.no_grad():
y_infer = model(X_test)
torch.no_grad()는 추론할 때는 gradient 계산이 필요 없다는 뜻입니다. 학습이 아니라 예측만 하는 상황이기 때문에 불필요한 계산을 줄입니다.
모델 출력은 각 클래스에 대한 점수입니다. argmax를 사용하면 가장 점수가 높은 클래스 번호를 얻습니다. 이후 LabelEncoder의 inverse_transform을 이용해 숫자 라벨을 다시 세포 유형 이름으로 바꿉니다.
마지막으로 실제 cell_type과 모델 예측 y_infer를 UMAP 위에 함께 그립니다. 이렇게 하면 모델이 어느 세포 집단을 잘 맞히고, 어느 집단에서 헷갈리는지 눈으로 확인할 수 있습니다.
예측 결과를 볼 때는 전체 accuracy만 보지 않는 것이 좋습니다. 특정 세포 유형은 잘 맞히고, 희귀 세포 유형은 잘 못 맞힐 수 있습니다. 그래서 세포 유형별 성능 분석이 중요합니다.
14. 클래스 불균형은 왜 문제가 되나요?
원문 실습 27.2에서는 클래스별 가중치를 적용해 불균형 데이터 문제를 해결하라고 합니다. 클래스 불균형은 어떤 세포 유형은 매우 많고, 어떤 세포 유형은 매우 적은 상황입니다.
예를 들어 전체 세포 중 90%가 A 세포이고 10%가 B 세포라고 합시다. 모델이 모든 세포를 A라고만 예측해도 accuracy는 90%입니다. 겉보기에는 좋아 보이지만, B 세포는 하나도 맞히지 못합니다. 생명정보학에서는 오히려 이런 희귀 세포 유형이 중요할 수도 있습니다.
클래스별 가중치는 적은 클래스의 실수를 더 크게 반영하도록 만드는 방법입니다. 원문에서는 클래스별 샘플 수의 역수를 이용해 가중치를 만듭니다. 샘플이 적은 클래스일수록 가중치가 커집니다.
초보자는 클래스 가중치를 “소수 반 학생의 시험 문제도 공정하게 반영하기 위한 배점 조정”이라고 생각하면 됩니다.
하지만 가중치를 무조건 세게 주는 것이 항상 좋은 것은 아닙니다. 너무 강하게 주면 희귀 클래스에 과하게 맞추다가 전체 성능이 흔들릴 수 있습니다. 그래서 confusion matrix, class별 precision/recall 같은 지표도 함께 보는 것이 좋습니다.
15. 모델 아키텍처를 개선한다는 것은 무슨 뜻인가요?
원문 실습 27.2에서는 모델 구조를 input_dim → 512 → 256 → 128 → num_classes로 바꾸고, 레이어 순서를 Linear → BatchNorm → ReLU → Dropout으로 변경하라고 합니다.
모델 아키텍처는 신경망의 구조입니다. 레이어가 몇 개 있는지, 각 레이어의 뉴런 수가 몇 개인지, 활성화 함수와 정규화, dropout을 어떤 순서로 쓰는지 등을 포함합니다.
처음 모델은 비교적 단순합니다.
Input 50 → 128 → 64 → num_classes
개선 모델은 더 넓고 깊습니다.
Input 50 → 512 → 256 → 128 → num_classes
더 큰 모델은 복잡한 패턴을 더 잘 배울 수 있지만, 과적합 위험도 커집니다. 그래서 BatchNorm, Dropout, validation 성능 확인이 중요합니다.
모델 개선은 “무조건 레이어를 많이 쌓는 일”이 아닙니다. 데이터 크기, 클래스 수, 잡음 수준, 계산 자원, 과적합 여부를 함께 고려해 구조를 조정하는 일입니다.
16. scVI는 무엇인가요?
원문 마지막에는 scVI가 나옵니다. scVI는 single-cell Variational Inference의 약자입니다. 단일세포 데이터를 딥러닝 기반 확률 모델로 분석하는 도구입니다.
scVI는 VAE, 즉 변분 오토인코더 구조를 기반으로 합니다. 오토인코더는 입력 데이터를 압축했다가 다시 복원하는 모델입니다. 가운데에 있는 좁은 공간을 잠재 공간이라고 합니다. 이 잠재 공간은 원본 데이터의 중요한 특징을 압축해 담습니다.
단일세포 데이터에서는 batch effect가 큰 문제입니다. 서로 다른 실험 날짜, 장비, 실험자, 샘플 처리 방식 때문에 생물학적 차이가 아닌 기술적 차이가 데이터에 섞일 수 있습니다. scVI는 이런 batch 정보를 모델에 반영해, 배치 효과가 줄어든 잠재 표현을 학습할 수 있습니다.
원문에서는 scvi.model.SCVI.setup_anndata(adata, batch_key='batch')처럼 batch 정보를 지정합니다. 이후 모델을 훈련하고 model.get_latent_representation()으로 저차원 표현을 얻습니다. 이 표현은 클러스터링이나 UMAP 시각화에 활용할 수 있습니다.
초보자는 scVI를 “단일세포 데이터를 딥러닝으로 정리해, 배치 효과를 줄이고 분석하기 좋은 좌표로 바꿔주는 도구”라고 이해하면 됩니다.
17. 딥러닝 분류에서 shape와 숫자 읽기
27챕터에서는 모델 구조를 읽을 때 shape 감각이 중요합니다. 예를 들어 세포가 2,000개이고 각 세포를 PCA 50차원으로 표현했다면 입력 X의 크기는 다음과 같습니다.
2,000개 세포 × 50개 PCA 특징
세포 유형이 7개라면 마지막 Linear layer의 출력 차원은 7이어야 합니다. 모델은 각 세포에 대해 7개 클래스 점수를 내고, 그중 가장 큰 값을 가진 클래스를 예측값으로 고릅니다.
Accuracy도 직접 계산할 수 있어야 합니다.
테스트 세포 100개 중 82개를 맞힘 → accuracy = 82 / 100 = 0.82 = 82%
Batch 수도 비슷합니다. 훈련 세포가 1,000개이고 batch size가 128이면 한 epoch에서 필요한 batch 수는 1000 / 128 = 7.8이므로 올림해서 8개입니다. 마지막 batch는 128개보다 작을 수 있습니다.
18. validation과 test라는 말을 구분해서 읽기
딥러닝에서는 보통 train, validation, test를 구분합니다. train은 모델 가중치를 실제로 업데이트하는 데이터입니다. validation은 학습 중 모델 상태를 점검하는 데이터입니다. test는 최종 성능 확인용 데이터입니다.
실습 코드에서는 간단화를 위해 test loader가 validation 역할처럼 들어가는 경우도 있습니다. 이때 중요한 것은 이름보다 역할입니다. 모델이 직접 학습에 사용하지 않은 데이터로 loss와 accuracy를 확인해야 과적합을 의심할 수 있습니다.
예를 들어 train_loss는 계속 내려가는데 val_loss가 올라가면, 모델이 훈련 데이터에는 점점 맞춰지지만 새로운 데이터에는 약해지는 과적합을 의심합니다.
19. 27챕터 들어가기 전 최소 체크리스트
27장을 읽기 전에 다음 질문에 답할 수 있으면 좋습니다.
- 지도학습은 무엇이며, 27장에서 입력과 정답은 각각 무엇인가요?
- PyTorch와 PyTorch Lightning은 어떤 관계인가요?
- Tensor는 무엇인가요?
LabelEncoder는 왜 필요한가요?- PCA 50차원을 모델 입력으로 쓰는 이유는 무엇인가요?
- Linear, ReLU, BatchNorm, Dropout은 각각 어떤 역할을 하나요?
- CrossEntropyLoss는 어떤 문제에서 사용하나요?
- Loss와 accuracy는 어떻게 다른가요?
- 훈련 데이터와 테스트 데이터를 나누는 이유는 무엇인가요?
- DataLoader와 batch size는 무엇인가요?
training_step과validation_step은 각각 무엇을 하나요?- TensorBoard에서는 어떤 지표를 확인하나요?
- 체크포인트는 왜 저장하나요?
- 클래스 불균형은 왜 문제가 되나요?
- scVI는 어떤 문제를 해결하는 데 도움이 되나요?
이 질문들이 이해된다면 27장의 코드는 단순한 딥러닝 예제가 아니라, 단일세포 데이터를 자동 분류 모델로 연결하는 흐름으로 보일 것입니다.
문제 풀이
딥러닝 기반 세포 유형 분류
주관식 답안은 Gemini API로 채점합니다. API 키는 이 브라우저에만 저장됩니다.
-
1. [쉬움] 객관식
27챕터의 핵심 목표로 가장 적절한 것을 고르라.
-
2. [쉬움] 객관식
PyTorch와 PyTorch Lightning의 차이로 가장 적절한 것을 고르라.
-
3. [쉬움] 객관식
Tensor에 대한 설명으로 가장 적절한 것을 고르라.
-
4. [쉬움] 객관식
세포 유형 분류 모델에서 CrossEntropyLoss가 쓰이는 대표적 이유로 가장 적절한 것을 고르라.
-
5. [쉬움] 객관식
Accuracy와 Loss의 차이로 가장 적절한 것을 고르라.
-
6. [쉬움] 객관식
훈련 데이터와 테스트 데이터를 나누는 이유로 가장 적절한 것을 고르라.
-
7. [보통] 객관식
원본 유전자 전체가 아니라 PCA 50차원을 입력으로 쓰는 이유로 가장 적절한 것을 고르라.
-
8. [보통] 객관식
DataLoader와 batch의 역할로 가장 적절한 것을 고르라.
-
9. [보통] 객관식
다음 PyTorch layer 흐름의 의미로 가장 적절한 것을 고르라.
model = nn.Sequential( nn.Linear(50, 128), nn.ReLU(), nn.Linear(128, 5) ) -
10. [보통] 객관식
다음 코드에서 마지막 출력 차원
5가 의미하는 것으로 가장 적절한 것을 고르라.nn.Linear(128, 5) -
11. [보통] 객관식
다음 Lightning 메서드의 역할로 가장 적절한 것을 고르라.
def training_step(self, batch, batch_idx): x, y = batch logits = self(x) loss = self.loss_fn(logits, y) return loss -
12. [보통] 객관식
다음 코드에서
configure_optimizers의 역할로 가장 적절한 것을 고르라.def configure_optimizers(self): return torch.optim.Adam(self.parameters(), lr=1e-3) -
13. [어려움] 객관식
다음 학습 로그를 해석한 것으로 가장 적절한 것을 고르라.
train_loss 계속 감소 val_loss 5 epoch 이후 증가 val_accuracy 감소 -
14. [어려움] 객관식
다음 상황에서 checkpoint의 가치로 가장 적절한 것을 고르라.
20 epoch 중 8 epoch에서 validation accuracy가 가장 높았고 이후 과적합이 나타났다. -
15. [어려움] 객관식
클래스 불균형이 세포 유형 분류에서 문제가 되는 이유로 가장 적절한 것을 고르라.
-
16. [어려움] 객관식
모델 아키텍처 개선에 해당하는 예로 가장 적절한 것을 고르라.
-
17. [어려움] 객관식
scVI의 핵심 성격으로 가장 적절한 것을 고르라.
-
18. [어려움] 객관식
다음 추론 코드에서
torch.no_grad()를 쓰는 이유로 가장 적절한 것을 고르라.with torch.no_grad(): logits = model(x_test) -
19. [어려움] 객관식
다음 confusion matrix를 보는 이유로 가장 적절한 것을 고르라.
row: true label column: predicted label -
20. [어려움] 객관식
다음 학습 상황에서 가장 먼저 의심할 문제로 적절한 것을 고르라.
훈련 accuracy는 매우 높지만 validation loss는 계속 증가한다. -
21. [쉬움] 객관식
세포 2,000개를 PCA 50차원 특징으로 표현했다. 입력
X의 shape로 가장 적절한 것을 고르라. -
22. [쉬움] 객관식
세포 유형 클래스가 7개라면 마지막 Linear layer의 출력 차원으로 가장 적절한 것을 고르라.
-
23. [보통] 객관식
테스트 세포 100개 중 82개를 맞혔다. accuracy로 가장 적절한 것을 고르라.
-
24. [보통] 객관식
훈련 세포 1,000개, batch size 128일 때 한 epoch에 필요한 batch 수로 가장 적절한 것을 고르라.
-
주관식 1. [쉬움] 주관식 · Gemini 채점
Tensor, layer, loss, optimizer의 역할을 간단히 설명하라.
-
주관식 2. [보통] 주관식 · Gemini 채점
train/validation/test split이 필요한 이유를 설명하라.
-
주관식 3. [보통] 주관식 · Gemini 채점
Accuracy만으로 세포 유형 분류 모델을 평가하면 위험한 이유를 설명하라.
-
주관식 4. [어려움] 주관식 · Gemini 채점
PCA 50차원을 입력으로 쓰는 전략과 scVI 같은 표현학습 접근의 차이를 설명하라.