Writing Upgradeable Contracts initialize function Bug or Not?

I created ERC20 token using upgradeable smartcontract it will create the token I intended. Though I noticed that if i will execute the initialize action even it is already deployed it will still initialize new token into the contract that executes the action. I thought that initialize action can only be executed once on deploy process.

This are the addresses created on upgradeable contract.

Token contract address:      "0x12FC65cc9D1c06BB94D88CB785e8987867769E53"
ProxyAdmin contract address: "0x7a1bc6dd98Cc126cE454fad687242ddcE05e7E52"
TransparentUpgradeableProxy: "0x246F162B9f7A082Bd49F805fbbE32cD730975cb9"

I believe this is due to proxying the contract or something and I cant find the exact explanation if this is how it works.

PS: I tested it on non upgradable smartcontract so it uses constructor{} instead of initialize function and it run only once on deployment process.