오늘은 2가지의 특강이있으며 팀 프로젝트의 전처리과정과 streamlit 예습을 주로 진행할 것 같습니다.
어제 진행하지 못한 Python문제풀이까지 모두 마치는것이 목적입니다.
목차로 일정을 정리하니 학습 내용이 조금 부족하다는 생각이 들지만 당장 무엇을 학습해야할지 떠오르지 않아 학습을 진행하며 추가해 진행할 예정입니다.
그럼 일정을 다 계획했으니 학습을 시작하겟습니다.
Python 문제풀이
1. 콜라츠 수열 만들기
while조건 문과 식의 대입은 맞췃지만 아직 문법 정리 및 조건 정의가 어색해서 몇번 수정 후 완료
def solution(n):
answer = [n]
while n != 1:
if int(n) % 2 == 0:
n = n/2
else:
n = 3*n+1
answer.append(n)
return answer
2. 배열만들기 4
10초 이상이 걸린다고 실패 => 불필요한 욧 제거 필요
for문 제거 후 기대값이 다름
자잘한 문법 사용 방법에 어색함
# 내가 푼 문제
def solution(arr):
stk = []
i = 0
while i < len(arr):
for i in range(len(arr)):
if stk == []:
stk.append(arr[i])
i += i + 1
elif stk[-1] < arr[i]:
stk.append(arr[i])
i += i + 1
elif stk[-1] >= arr[i]:
stk.pop()
return stk
# 솔루션 후 풀이
def solution(arr):
stk = []
i = 0
while i < len(arr):
if not stk:
stk.append(arr[i])
i += 1
elif stk[-1] < arr[i]:
stk.append(arr[i])
i += 1
else:
stk.pop()
return stk
def solution(my_string, index_list):
answer = ''
for i in range(len(index_list)):
answer += my_string[index_list[i]]
return answer
6. 9로 나눈 나머지
완료
def solution(number):
answer = 0
number = int(number) % 9
answer += number
return answer
base 지식 탐구
1. ASCII 문자란?
문자와 숫자를 매핑하는 표준 코드 체계입니다.
컴퓨터가 문자를 숫자로 저장하고 처리할 수 있도록 설계된 초기 문자 인코딩 시스템입니다.
아스키 코드는 총 128개의 문자로 구성
7비트로 표현
파이썬에서 자주쓰는 제어문자 = ASCII
줄바꿈 \n
탭 \t
캐리지 리턴 \r
널 문자 \0
아스키 문자의 활용 방법
데이터 전송
문자전환
암호화/복호화
2. 문자열 함수
Streamlit 특강 1일차
소개 및 설치
특징
쉽고 간단한 문법으로 빠르게 결과를 웹으로 만들 수 있다.
설치`python pip install streamlit
import streamlit as st
import streamlit as st
import pandas as pd
import numpy as np
- Text 작성
- st.title("스파르타코딩클럽 AI 8기 예제")
- st.header("지금 스트림릿 예제를 만들고있습니다")
- st.text("따라가고있어요")
- st.markdown("### 마크다운 헤더 문법입니다.")
- 수식
- st.latex("E = mc^2")
- 버튼 생성 및 동작
if st.button("눌러주세요"): st.write("글씨가 생겨요")
- 상호작용 위젯 만들기
agree_box = st.checkbox("동의 하시겠습니까?") if agree_box is True: st.write("동의 하셨습니다.")
- 데이터 프레임 시각화
df = pd.DataFrame({ "이름": ["장준영", "장한검", "양지아"], "출생년도": ["1996년 11월 04일", "1996년 11월 04일", "2018년 10월 12일"] })
st.write("### 데이터프레임 출력") st.dataframe(df) # 동적으로 크기를 조정 가능한 데이터프레임 st.table(df) # 정적 테이블
- 차트 데이터
st.write("### 랜덤 데이터로 라인 차트 그리기") chart_data = pd.DataFrame( np.random.randn(20, 3), # 20개의 행과 3개의 열을 가진 랜덤 데이터 생성 columns=["a", "b", "c"] # 열 이름 지정 )
st.line_chart(chart_data)
- 막대 차트 데이터
st.write("### 학생 점수로 막대 차트 그리기") chart_data_2 = pd.DataFrame({ "학생번호": ["1", "2", "3", "4"], "점수": [80, 100, 40, 50] })
st.bar_chart(chart_data_2.set_index("학생번호")) # 학생번호를 인덱스로 설정하여 차트 그리기
`
수준별 학습반: 딕셔너리 특강
1. 딕셔너리란?
key, value 쌍으로 값이 들어있는 데이터
key는 고유식별자로 바뀔 수 없다.
key에는 불변한 데이터타입만이 올 수 있다.
2. 사용함수
del: 키값 삭제
3. 사용 메서드
items(): key,value 불러오기
keys(): key값 불러오기
values(): value값 불러오기
get('키 값', 'none대신 나올 말'): key에 해당하는 value값을 불러오고 없다면 2번째 파라미터로 none을 대신한다.
회고
오늘은 조금 쉬어가는 느낌이 드는 하루였습니다.
그만큼 어제가 힘들었다는 이야기일 수 있겟어요ㅎㅎ 몸은 그대로 피로 축적이지만 괜찮습니다.
버틸만해요
언제나 생각하듯이 조금 더 높은 곳에 올라가려 시도를 하면 가장 아래 부분이 휘청인다는 느낌을 많이 받았습니다.
그래서 틈이 나는대로 기초적이지만 내가 모르고 내용을 알면 머리가 아파질만한 내용을 공부했어요.
진짜 생각했던 그대로 부실하더군요 물론 지금도 같습니다. 이렇게 초석 부분에 돌을 하나 더 끼워 넣었으니 조금 더 단단해졌습니다.
하하하!
오늘의 학습은 매우 만족 스러웠고 아쉬운 부분은 없었습니다.
하지만 아직 팀과제의 전처리 부분에서 판단 미스로 다시 전처리를 진행하는 과정을 거치고 쉬도록하겟습니다.
하지만 의견, 건의 등 자유롭게 말할 수 있어 많은 부분을 공유하고 같이한다는 느낌이 들어 좋기도했습니다.
또한 팀회의에서 약간의 이슈가 발생했지만 서로 배려하면 잘 넘어갓습니다.
6조 화이팅!!
LLM특강 5일차
1. LangChain
AI모델의 능력을 극대화하고, 개발과정을 간소화 한다.
invoke의 개념 (call이라 생각하면 된다.)
invoke가 가능한 객체는 learnable이라 부름
model
parser
Chain이란: 파이프 연산자 '|'를 사용해서 learnable객체 끼리 연결 (입출력이 있는 함수면 사용 가능)
2. RAG
과정
데이터 로더 => 스플릿("Recursive Character Split") => 임베딩("Chroma", "OpenAIEmbeddings") => 벡터스토어에 저장 => 리트리버 변환 => 프롬프트 템플릿 작성 => 입력 질문과 비슷한 문장을 리트리버로 "문맥 Docs" 가져오기 => "질문 Docs" 포맷팅 및 프롬프트의 {question}에 "질문 Docs" 넣기("RunnablePassthrough") => 프롬프트의 {context}에 "문맥 Docs" 넣기 => 프롬프트를 모델에 전달하고 결과 생성 => text출력("StrOutputParser")
GIT 관련 유튜브 팀원과 동시 시청
과정
레포 만들기 => 팀원 초대 => develop 브렌치 만들기 => 마스터 브랜치 block 설정 => 팀 프로젝트 보드 개설 => 이슈 마다 브렌치 만들기 => 작업 후 push => PullRequste에 확인 요청 => 코드 리뷰 & 승인 => develop에서 merge => main브랜치
이슈 보드
add item => 작업 이름 작성 => convert to issue의 작성 레포 클릭 => creat branch에서 develop설정 후 creat클릭 => 작업 상황에 맞게 보드 조작
vscode에서 브랜치 열기
git clone "URL" => 터미널에서 해당 파일 들어가기 => git fetch origin => git checkout '브랜치' => 작업 시작
회고
아 오늘은 한번도 진행해보지 못한 주제를 처음부터 끝까지 손봐야하는 주제가 떨어져서 힘들었습니다.
팀 회의를 이렇게까지 진득하게 해본것도 처음이였고 팀내에서 의견을 이렇게 많이 내는것 그리고 회의도중 의견차이를 좁히는 과정 등 모든 과정이 처음이였습니다.
팀원분들이 서로 배려해주고 의견을 표출도 잘하시고 해서 오래동안 회의를 진행하였고 만족스러운 결과가 나왔다고 생각합니다.
개인 공부를 이 커리큘럼에서 가장 적게한 날이지 않을까 싶을 정도로 회의를 오래했지만 LLM특강, 수준별 학습반 강의 등 정해진 일정이있어서 학습하는 부분에 아무런 이득이 없는 하루는 아니였습니다.
# 내 틀린 풀이
def solution(arr, queries):
for s, e, k in queries:
for i in range(s, e + 1):
if arr[i] % k == 0:
arr[i] += 1
return arr
# 검색을 통한 풀이
def solution(arr, queries):
for s, e, k in queries:
for i in range(s, e + 1):
if i % k == 0:
arr[i] += 1
return arr
2. 배열 만들기2
리스트 컴프리헨션을 잘 사용하고싶다.
all함수를 이용하는 방법이 가장 간단해 보인다.
# 틀린 풀이
def solution(l, r):
answer = []
for i in range(l, r+1):
if str(i) == '0' or str(i) == '5':
answer.append(i)
else:
answer.append(-1)
# 검색을 통한 풀이
def solution(l, r):
answer = []
for i in range(l, r + 1):
if all(a in '05' for a in str(i)):
answer.append(i)
return answer if answer else [-1]
3. 카운트 업
완료
ef solution(start_num, end_num):
answer = []
for i in range(start_num, end_num + 1):
answer.append(i)
return answer
# 간단한 정답
def solution(start, end):
return [i for i in range(start,end+1)]
LLM 특강
1. LLM의 문제
맥락이 없는 상태인 챗봇에 맥락을 알려줘야한다.
할루시네연: 없는 정보를 만들어 내서 전혀 상관없는 정보를 만든다.
2. RAG의 배경지식
Retrieval-Augmented Generation 검색증강생성
과정
연관 문서 저장 => 문서 쪼개기 => 질문에 맞는 문서 내용 찾기 => 결과 출력
문서 내용 찾는 방법
비슷한 텍스트를 찾아낸다.(유클리드 거리를 계산을 통해 유사도를 구할 수 있다.)
임베딩을 활용해 데이터 포인트의 위치를 찾을 수 있다.
이렇게 찾은 데이터 포인트들의 좌표값을벡터 스토어에 저장한다.
3. AnyThingLLM 실습
AnyThingLLM 다운
LLM, 임베딩 모델 선택 등 설정 값 조정
로컬환경의 파일 불러와서 임베딩 클릭하고 바로 실행 가능
딥러닝 복습
1. 인공지능, 머신러닝, 딥러닝의 관계
인공지능(AI): 인공지능은 인간의 지능을 모방하여 문제를 해결하는 기술을 의미합니다. AI는 규칙 기반 시스템부터 자율 학습 시스템까지 다양한 접근 방식을 포함합니다.
머신러닝(ML) :머신러닝은 데이터를 이용해 모델을 학습하고, 이를 통해예측이나 결정을 내리는 기술입니다. 머신러닝은 AI의 하위 분야로, 지도 학습, 비지도 학습, 강화 학습 등의 방법을 포함합니다.
딥러닝(DL) :딥러닝은 머신러닝의 하위 분야로,다층 신경망을 사용하여 데이터를 학습합니다. 딥러닝은 특히 대규모 데이터와 복잡한 문제를 다루는 데 강력한 성능을 발휘합니다.
2. 활성화 함수
ReLU
Sigmoid
Tanh(Hyperbolic Tangent)
3. 손실 함수
MSE(평균 제곱 오차): 예측 값과 실제 값의 차이를 제곱하여 평균(회귀문제)
Cross-Entropy(교차 엔트로피): 예측 확률과 실제 클래스 간의 차이 측정(분류문제)
4. 최적화 알고리즘
SGD: 랜덤의 일부데이터(미니배치)를 사용해 기울기를 계산하고 업데이트
Adam: 학습률을 적응적으로 조정
5. 딥러닝 활용
회귀문제
이진 분류 문제
다중 클래스 분류 문제
특징 추출(이미지, 이차원 데이터)
시계열 데이터, 순차적인 데이터 처리 및 예측
자연어 처리 및 예측
6. 하이퍼 파라미터
사용자가 설정해야하는 값으로 모델성능에 영향을 미치는 것
학습률: 가중치를 업데이트하는 속도 결정
배치크기: 한번의 업데이트에 데이터 샘플 수
에포크 수: 전체 데이터 셋 몇번 반복 학습 결정
모멘텀: 이전 기울기 반영 여부 결정
가중치 초기화: 모델의 가중치 초기화 방법
7. 하이퍼 파라미터 자동 튜닝 기법
Grid Search: 모든 조합을 시도
Random Search: 무작위로 값을 선택해 최척화
Bayesian Optimization: 이전 결과 바탕으로 다음 평가의 하이퍼파라미터 결정