라인업
GDSC Code Birdge (gdsc-donga.github.io)
cs공부와 코테공부의 균형맞추기
코테같은 알고리즘 코딩 문제는 한번에 많이 보고 추후엔 감을 잃지 않을 정도로만 보기
(예를 들어, 방학같은때만이라도 하루에 3문제씩 알고리즘 문제 빡세게 풀기)
성장하는 개발자가 되게위해 1일1커밋, 블로그 등을 했지만 취업을 위한 보여주기 용일뿐이라는걸
깨닫고 그만뒀음.
처음 취업준비할때 스펙이 해커톤같은 대회 10번정도 나가서 프로젝트 10개정도, 알고리즘 문제 1000문제정도라고 함. 그런데 생각보다 취업이 쌓아온 스펙만큼 결과가 안나왔었음.
자신이 관심있는 기술스택, 관심있는 회사가 주로 사용하는 기술스택을 배우는게 좋다
안정했다면 자바 코틀린 자바 스프링 많이 쓰니 배워놓는것도 나쁘지않다
python도 추천
깃허브 utilforever
<강화학습(MDP)이란?>
쥐를 가둬놨을때 쥐가 특정행동으로 보상을 받으면 처음엔 인지못하다가 시간이 지날수록 그 행동을 반복할수록 특정행동을 하면 보상을 준다는 것을 인지해가는것
상태=s
행동=a
<보상함수>
에이전트가 행동한 시간=t
보상을 받는 시간=t+1
보상함수는 짜기 나름
<상태변환확률>
상태의 변화에 확률적 요인이 들어가는 걸 수치로 표현한것
<감가율>
시간에 따라서 감가하는 비율
더 먼 미래에 받을 수록 에이전트가 받는 보상의 크기는 줄어든다
<정책>
모든 상태에서 에이전트가 할 행동
파이 기호 사용
최적의 정책을 찾기 위한 여정
<가치함수>
지금 받은 보상+미래에 받을 보상의 기대값
아직 받지않은 보상을 가치함수로 해결
문제점
1.현재받을 보상과 나중에 받을 보상이 같지 않다는 문제점
2.보상을 한번에 받을때와 나눠서 받을때가 같다는걸 구분X
3.보상이 발산하는걸 구분하지 못한다
단순한 보상합을 쓰면 안된다→감마를 곱해 감가율을 고려한다
발산하는걸 방지한다.
반환값이라고 하는데 게임이 끝난 후에야 반환값을 알수있기때문에 진행중에 알지X
그리디 적용하여 두가지 형태의 가치함수 나타낼 수 있음
<벨만기대방정식>
현재와 다음상태의 가치함수 관계 나타냄
<큐함수>
행동가치함수=어떤상태에서 어떤 행동이 얼마나 좋은지 알려주는 함수=큐함수
가치함수와 큐함수 상호변환 가능
<벨만최적방정식>
정책과 상태변환확률이 곱해져 풀어져 있는식으로 표현
참 가치함수(→하나의 정책에 대해서만)와 최적 가치함수(→가장 높은 보상을 주는것)는 다르다
최적정책은 어떤 한 상태에서 최적의 큐함수중에서 가장 큰 큐함수를 가진 행동을 하는것
그러면 경로가 그려진다 (보상의 합이 최적이 되는것)
데이터셋 없이 진행되기 때문에 환경 만드는것과 데이터셋을 쌓아올리는 과정이 오래걸림
<다이내믹 프로그래밍>
DP로 해결
<정책 이터레이션>
무작위정책→정책발전
정책과 가치함수가 분리된 상태로 발전한다
<정책평가>
1.현재상태에서 가능한행동을 통해 다음행동예측
2.K번째 가치함수로 다음상태에 대한 가치 구함
3.다음상태 가치에 감가율을 곱하고 행동에 대한 보상을 더함
4.??
5.2~4과정 다 더함
6.K+1번째 가치함수 행렬에 저장
7.1~6과정 반복
8.이과정반복하면 수렴→어떤 정책에 대한 참가치함수가 된다
<정책발전>
정책평가를 통해 정책을 발전시킨다
가장 큰값을 남기고 나머지 다 버린다=그리디(최적)
탐욕정책을 사용하면 무조건 좋거나 같기때문에 사용
<가치 이터레이션>
현재정책이 최적이라 가정, 결정적 정책을 적용한다면?
→틀린 가정이지만 반복적으로 가치함수 발전시키면 언젠가 최적정책을 구할 수 있다
한가지 가정을 함으로써 가치함수의 업데이트만을 다룰 수 있어 좋다(정책발전필요X)
1.제일 높은 이득을 얻는 행동을 고름
2.상태변환확률이 1이라 가정하여 가치함수를 업데이트하면 된다
코드가 짧아 좋다
<다이내믹 프로그래밍의 한계>
계산을 빨리 하기 위한것, “학습”은 아님
정책/가치 이터레이션으로도 최적 정책 찾을 수는 있다
하지만 강화학습을 배우는이유는
1.차원의 저주(차원이 커지면 커질수록 DP는 기하급수적으로 커진다)
2.환경에 대한 완벽한 정보가 필요(정확한 정보가 없으면 DP사용 불가)
<몬테카를로 근사>
무작위로 무엇인가를 해서 원래 값 추정하는 것
EX)전체넓이는 아는데 그 안에 속한 원의 넓이를 구하고싶을때
→무작위로 N개의 점을 뿌렸을때 원 안에 들어간 점의 개수를 구해 원넓이의 근삿값을 구한다
데이터가 없지만 샘플링을 통해 참 가치함수의 값을 근사하는 것(정확X)
환경에 대한 정확한 정보가 없는 상태
가치함수 업데이트 식은 (현재값-근사값)에 알파를 곱해 더하여 업데이트 함(오차값을 더하는것)
<몬테카를로 예측> =시간차예측
실시간으로 가치함수 업데이트
반환값 기다릴 필요없이 바로 업데이트 가능
<살사> =SARSA
시간차 제어=시간차 예측+탐욕정책
살사의 문제점: 행동하는 대로 학습하는 시간차 제어
최적정책을 학습하지 못하고 잘못된 정책을 학습할 수 있음
해결: 항상 그리디로 가지 않게끔, 확률을 부여(=입실론 그리디)
<큐러닝>
다음 상태에서 어떤 행동을 했는지와 상관없이 업데이트
RL→DRL
강화학습→심층강화학습(딥러닝 들어오면서 획기적 발전)
CTF-백준을 해킹대회로?
어떤 문제들이 유행하는지 알아보면 현재 트렌드를 알 수 있다
기술블로그 읽기
깃허브에서 최신정보 습득이 굉장히 중요
whitepaper: 내부적으로 어떤기능이 있는지, 변화된 내용을 알때 큰 도움
class/structure ref
시나리오 만들기: 취약점 발견할 확률이 높아진다
DBI: 메모리 값이 어디로 이동하는지, 복잡한 함수 추적할때 사용
블록체인에서 악의적인 트랜잭션 없애기
tendary: 컨트랙트간에 어떻게 코드가 호출이되는지, 토큰이 어디에서 어디로 전송이 되는지 등 알 수 있게 해주는 도구
백준 1위 tony9402
https://www.acmicpc.net/user/tony9402
최근기업코테 빈출유형
<삼성>
BFS,DFS
시뮬레이션
자료구조
<카카오>
자료구조
수학
문자열
완전탐색
알고리즘 공부는
0.언어선택( 편한언어,지원할 직군 언어, 서브언어(선택) )
서브언어로는 PYTHON추천
1.자주나오는 알고리즘,자료구조 공부
브론즈5 ~ 플레티넘5 or 골드
여러 유형을 풀어보는것이 좋음
https://github.com/tony9402?tab=repositories
코테문제가 어려워지고있는데, 귀찮게 나옴(구현을 많이 하게)
2.시간제한을 두고 풀어보기
5문제를 3시간안에 풀기
꾸준히 풀기, 안풀면 잊어먹음
(tip)
프로그래머스는 백준과 다르게 함수인자로 입력이 들어옴
자신이 볼 코테는 어떤 방식인지 확인 후 문제사이트 고르기
너무 쉬운 문제를 많이 푸는 것은 중요하지 않다
여러 코테 경험(서류없이 볼 수 있는 공채나 모의 코테)
발전이 없는것같다고 해서 포기하지 말기
시간복잡도 계산을 하여 시간안에 통과되는지 계산할 줄 알아야 한다
지문에 답 또는 힌트가 숨어져 있을 수도 있다
수의 범위를 기억하자(int를 longlong으로 바꾸기, overflow발생하지 않는지 확인)
구현 또는 시뮬레이션 문제는 모듈화를 하자(어떤 문제,어떻게 고쳐야하는지 알수있다)
코드트리-진단 테스트(무료)